Свободное автоматическое отображение NHibernate не учитывает коллекции IList <T>как проиндексированные - PullRequest
2 голосов
/ 03 октября 2009

Я использую automap для сопоставления модели домена (упрощенная версия):

public class AppUser : Entity
{
    [Required]
    public virtual string NickName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public virtual string PassKey { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    public virtual string EmailAddress { get; set; }
    public virtual IList<PreferencesDescription> PreferencesDescriptions { get; set; }
}

public class PreferencesDescription : Entity
{
    public virtual AppUser AppUser { get; set; }
    public virtual string Content{ get; set; }
}

Коллекция PreferencesDescription отображается как IList, так же как и индексированная коллекция (когда мне требуются стандартные неиндексированные коллекции, я использую ICollection).

Дело в том, что беглые средства автоматического создания nhibernate отображают мою модель домена как неиндексированную коллекцию (поэтому в DDL, сгенерированном SchemaExport, отсутствует свойство position).

¿Как я могу сделать это без необходимости переопределять этот самый случай - я имею в виду, как я могу сделать так, чтобы автомат Fluent nhibernate делал всегда проиндексированные коллекции для IList, но не для ICollection

1 Ответ

1 голос
/ 10 марта 2010

IList не является индексированной коллекцией. Вы можете получить доступ к элементам в IList по индексу, но их положение не сохраняется в базе данных. Вы не можете получить доступ к ICollection по индексу (без использования методов расширения), но у него есть метод AddAt для добавления объекта в коллекцию по индексу.

Если вам нужно сохранить положение объектов в коллекции, сопоставьте ее как map , что соответствует IDictionary. Я предполагаю, что автоматический будет использовать карту для типов коллекции IDictionary.

...