是否可以将列表作为活动记录类的属性
时间:2020-03-06 15:04:56 来源:igfitidea点击:
是否可以在ActiveRecord类上具有基本类型(例如String)的HasMany关系,而无需创建另一个实体(例如(TodoListItem))来保存值。
[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; } } }
有人可以帮忙吗?
解决方案
在ActiveRecord中,类型映射到表中的记录(默认情况下)。似乎我们在混淆此类型应如何映射到表。
MyClass类型应具有类似以下的定义(不包括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; } }
然后,加载列表:
public void LoadMyClasses() { MyClass[] results = MyClass.FindAll(); }
我建议我们花一些时间使用ActiveRecord文档(或者教程),因为这也应该有助于消除任何混乱。
是的,我们可以这样做。我们可以将一对多关系映射到内置或者简单类型(值类型或者字符串),而不是持久化类型。
我们需要在" HasMany"属性声明中指定" ColumnKey"," Table"和" Element"参数,以使其正确连接。我们必须有一个代理键列,以便AR可以处理更新和级联,然后Element
告诉AR表中的哪一列包含将用于创建列表的简单值。
[HasMany(typeof(string), Table="ToDoList_Items", ColumnKey = "ListItemID", Element = "Item")] public IList<string> Items { get; set; }
(或者类似的东西,我在此框上没有方便的编译器来检查它;但是根据API文档,它应该可以工作。)
说到这里,如果我们还没有看过,http://api.castleproject.org对于使用Castle Stack进行的任何工作都是必不可少的。