Возможно ли иметь List <string>в качестве свойства для активного класса записей - PullRequest
1 голос
/ 03 октября 2008

Возможно ли иметь отношение 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; }
  }
}

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

Ответы [ 2 ]

8 голосов
/ 07 октября 2008

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

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

0 голосов
/ 03 октября 2008

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

...