是否可以在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; }
}
}
有人可以帮忙吗?
答案 0 :(得分:8)
是的,你可以这样做。您可以将一对多关系映射到内置或简单类型(值类型或字符串),而不是持久类型。
您需要在ColumnKey
属性声明中指定Table
,Element
和HasMany
参数才能使其正确连接。您必须有一个代理键列,以便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堆栈的任何工作都是不可或缺的。
答案 1 :(得分:-1)
在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 documentation(或tutorial)因为这也有助于消除任何混淆。