【问题标题】:Is it possible to have a List<string> as a property on an active record class是否可以将 List<string> 作为活动记录类的属性
【发布时间】:2008-10-03 15:41:25
【问题描述】:

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

谁能帮忙?

【问题讨论】:

    标签: c# collections castle-activerecord


    【解决方案1】:

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

    您需要在HasMany 属性声明中指定ColumnKeyTableElement 参数以使其正确连接。您必须有一个代理键列,以便 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 堆栈的任何工作来说都是必不可少的。

    【讨论】:

      【解决方案2】:

      在 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),因为这也有助于消除任何困惑。

      【讨论】:

      • 我真的很喜欢将字符串列表作为活动记录类的属性,我删除了一些细节以突出我真正追求的东西。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多