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

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

Вопрос

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

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

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

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

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

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

Решение

В настоящее время это невозможно в рамках конвенции.Если вы хотите, чтобы автосопоставитель по умолчанию обрабатывал ваши коллекции как наборы, используйте 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();

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

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