Frage

Ist es möglich, eine HasMany Beziehung eines Grundtypen wie String, auf einer Activerecord-Klasse zu haben, ohne die Notwendigkeit für ein anderes Unternehmen wie (TodoListItem) zu schaffen, den Wert zu halten.

[ActiveRecord]
public class TodoList
{

  [PrimaryKey]
  public int Id
  {
    get { return _id; }
    set { _id = value; }
  }

  [HasMany(typeof(string)]
  public IList<string> Items
  {
    get { return _items; }
    set { _items= value; }
  }
}

Kann mir jemand helfen?

War es hilfreich?

Lösung

Ja, Sie können dies tun. Sie können eine Eins-zu-viel Beziehung zu einem integrierten oder einfachen Typ (Werttyp oder string) anstelle einem persistenten Typ zuordnen.

Hier finden Sie die ColumnKey, Table und Element params in der HasMany Attributdeklaration angeben müssen, um es richtig zu verkabeln. Sie haben einen Ersatzschlüssel Spalte haben, so dass die AR-Updates und Kaskaden umgehen kann, und dann sagt Element AR die Spalte in der Tabelle den einfachen Wert hält es wird die Liste machen verwenden.

[HasMany(typeof(string), Table="ToDoList_Items", 
         ColumnKey = "ListItemID", Element = "Item")]
public IList<string> Items { get; set; }

(oder so ähnlich - ich habe nicht einen Compiler praktisch auf dieser Box bekam es zu überprüfen,., Aber nach der API-Dokumentation sollte es funktionieren)

Apropos, wenn Sie nicht bereits einen Blick haben, http://api.castleproject.org ist irgendwie unverzichtbar für jede Arbeit mit dem Schloss Stapel.

Andere Tipps

In Active, Ihre Art zu einem Datensatz in einer Tabelle (Standardeinstellung) abzubilden. Es scheint, wie Sie sind verwirrend, wie diese Art zu Ihrer Tabelle zuordnen sollte.

Die MyClass Art eine Definition etwas davon haben sollte (mit Ausnahme der PK Einstellungen):

[ActiveRecord(Table = "MyTable")]
public class MyClass : ActiveRecordBase<MyClass>
{
    [Property]
    public int Id { get; set; }

    [Property]
    public int MyClassId { get; set; }

    [Property]
    public string ListItem { get; set; }
}

Dann die Liste zu laden:

public void LoadMyClasses()
{
    MyClass[] results = MyClass.FindAll();
}

Ich würde vorschlagen, dass Sie einige Zeit mit der Dokumentation Active verbringen ( oder Tutorial ), wie das sollte auch keine Verwirrung aufklären helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top