Est-il possible d'avoir une liste < string > en tant que propriété sur une classe d'enregistrement active
-
03-07-2019 - |
Question
Est-il possible d'avoir une relation HasMany d'un type de base tel que String sur une classe ActiveRecord, sans qu'il soit nécessaire de créer une autre entité telle que (TodoListItem) pour contenir la valeur.
[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; }
}
}
Quelqu'un peut-il aider?
La solution
Oui, vous pouvez le faire. Vous pouvez mapper une relation un-à-plusieurs sur un type intégré ou simple (type de valeur ou chaîne) plutôt qu'avec un type persistant.
Vous devez spécifier les paramètres ColumnKey
, Table
et Element
dans la déclaration d'attribut HasMany
de faites-le brancher correctement. Vous devez avoir une colonne de clé de substitution pour que le AR puisse gérer les mises à jour et les cascades, puis Élément
indique à AR quelle colonne de la table contient la valeur simple qu'il utilisera pour faire la liste.
[HasMany(typeof(string), Table="ToDoList_Items",
ColumnKey = "ListItemID", Element = "Item")]
public IList<string> Items { get; set; }
(ou quelque chose de similaire - je n'ai pas de compilateur à portée de main pour vérifier cela; mais d'après la documentation de l'API, il devrait fonctionner.)
À propos, http://api.castleproject.org est un peu indispensable pour tout travail avec la pile Castle.
Autres conseils
Dans ActiveRecord, vos types sont mappés sur un enregistrement dans une table (par défaut). Il semble que vous confondiez la façon dont ce type devrait correspondre à votre table.
Le type MyClass devrait avoir une définition similaire à celle-ci (à l'exception des paramètres PK):
[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; }
}
Ensuite, pour charger la liste:
public void LoadMyClasses()
{
MyClass[] results = MyClass.FindAll();
}
Je vous conseillerais de consacrer un peu de temps à la documentation ActiveRecord ( ou tutoriel ), ce qui devrait également contribuer à dissiper toute confusion.