2008-10-03 69 views
1

是否有可能在ActiveRecord类上具有基本类型(如String)的HasMany关系,而无需创建另一个实体,如( TodoListItem)来保存该值。是否有可能将一个列表<string>作为活动记录类中的一个属性

[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; } 
    } 
} 

任何人都可以帮忙吗?

回答

8

是的,你可以做到这一点。您可以将一对多关系映射到内置或简单类型(值类型或字符串)而不是持久类型。

您需要在HasMany属性声明中指定ColumnKey,TableElement参数以使其正确连接。您必须有代理键列,以便AR可以处理更新和级联,然后Element告诉AR表中的哪一列包含用于生成列表的简单值。

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

(或类似的东西 - 我还没有得到一个编译器上选中此复选框,以检查它得心应手;但每个API文档,它应该工作。)

说到这,如果你的避风港” t已经看过了,http://api.castleproject.org对于Castle堆栈的任何工作都是不可或缺的。

-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),因为这也应该有助于消除任何混淆。

+0

我真的把字符串列表作为活动记录类中的一个属性后,我删除了一些细节以突出显示我真正的内容。谢谢 – Xian 2008-10-03 21:24:11

相关问题