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