Можно ли использовать соглашение Fluent NHibernate для сопоставления всех наборов ICollections как наборов?

Можно ли использовать соглашение Fluent NHibernate для сопоставления всех наборов ICollections как наборов? У меня есть такой объект:

public class NoahsArk
{
    public virtual ICollection<Animal> Animals { get; set; }

    public NoahsArk()
    {
        Animals = new HashSet<Animal>();
    }
}

С текущими отображениями это свойство будет отображаться как HasMany(x => x.Animals).AsSet(), но как бы я сделал это с соглашением, которое я хочу использовать с Autopper?

Я должен добавить, что по умолчанию, ICollections сохраняться как ILists, и я получаю исключение приведения, когда он пытается HashSet в IList,

2 ответа

Решение

Это не возможно в соглашении, в настоящее время. Если вы хотите, чтобы автопроизводитель по умолчанию рассматривал ваши коллекции как наборы, используйте ISet вместо ICollection,

В ответ на вопрос Кристины, вы должны создать новый класс, который реализует IAutoMappingOverride<T>:

public class AlbumOverride : IAutoMappingOverride<Album>
{
    public void Override(AutoMapping<Album> mapping)
    {
        mapping.HasMany(x => x.Pictures).AsSet().Inverse();
    }
}

Затем скажите FNH использовать его в конфигурации:

Fluently.Configure()
    .Database(...)
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
        .UseOverridesFromAssemblyOf<Album>()))
    .BuildConfiguration();

Вам понадобится новый класс переопределения для каждой сущности, для которой вы хотите переопределить, но это в основном дело копирования и вставки.

Другие вопросы по тегам