Можно ли иметь список < string > как свойство в классе активных записей

StackOverflow https://stackoverflow.com/questions/167485

Вопрос

Возможно ли иметь отношение HasMany базового типа, такого как String, к классу ActiveRecord, без необходимости создания другого объекта, такого как (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; }
  }
}

Кто-нибудь может помочь?

Это было полезно?

Решение

Да, вы можете сделать это. Вы можете сопоставить отношение «один ко многим» со встроенным или простым типом (тип значения или строка), а не с постоянным типом.

Вам нужно будет указать параметры 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 своего рода незаменим для любой работы со стеком Касла.

Другие советы

В 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 ( или учебник ), поскольку это также должно помочь устранить любую путаницу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top