Ist es möglich, eine Liste als eine Eigenschaft auf einem aktiven Datensatzklasse haben
-
03-07-2019 - |
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?
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.