1

是否可以在 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; }
  }
}

任何人都可以帮忙吗?

4

2 回答 2

8

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

您需要在属性声明中指定ColumnKey,TableElementparams 以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 堆栈的工作来说都是必不可少的。

于 2008-10-07T00:29:28.577 回答
-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 文档(或教程),因为这也有助于消除任何混淆。

于 2008-10-03T16:03:11.143 回答