E 'possibile utilizzare una convenzione Fluent NHibernate per mappare tutti i ICollections come set?
-
22-09-2019 - |
Domanda
E 'possibile utilizzare una convenzione Fluent NHibernate per mappare tutti i ICollections come set? Ho un soggetto in questo modo:
public class NoahsArk
{
public virtual ICollection<Animal> Animals { get; set; }
public NoahsArk()
{
Animals = new HashSet<Animal>();
}
}
Con mappature fluenti, questa struttura sarebbe stata mappata come HasMany(x => x.Animals).AsSet()
, ma come vorrei farlo con una convenzione che voglio utilizzare con l'automapper?
Vorrei aggiungere che per impostazione predefinita, ICollections
ottenere persistito come ILists
, e ottengo un'eccezione getto quando si tenta di gettare il HashSet
a IList
.
Soluzione
Questo non è possibile in una convenzione, al momento. Se si desidera che l'automapper per trattare le vostre collezioni come set per impostazione predefinita, utilizzare ISet
invece di ICollection
.
Altri suggerimenti
In risposta a di Christina domanda , è necessario creare una nuova classe che implementa IAutoMappingOverride<T>
:
public class AlbumOverride : IAutoMappingOverride<Album>
{
public void Override(AutoMapping<Album> mapping)
{
mapping.HasMany(x => x.Pictures).AsSet().Inverse();
}
}
Poi dire FNH di usarlo nella configurazione:
Fluently.Configure()
.Database(...)
.Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
.UseOverridesFromAssemblyOf<Album>()))
.BuildConfiguration();
Avrete bisogno di una nuova classe override per ogni entità è necessario un override per, ma è soprattutto un affare di copia e incolla.