Est-il possible d'utiliser une convention NHibernate Fluent carte tous les ICollections comme des ensembles?
-
22-09-2019 - |
Question
Est-il possible d'utiliser une convention NHibernate Fluent carte tous les ICollections comme des ensembles? J'ai une entité comme ceci:
public class NoahsArk
{
public virtual ICollection<Animal> Animals { get; set; }
public NoahsArk()
{
Animals = new HashSet<Animal>();
}
}
Avec les correspondances couramment, cette propriété serait mis en correspondance comme HasMany(x => x.Animals).AsSet()
, mais comment pourrais-je faire cela avec une convention que je veux utiliser le automapper?
Je dois ajouter que, par défaut, se ICollections
persisté comme ILists
, et je reçois une exception casting quand il essaie de jeter le HashSet
à IList
.
La solution
Ceci est impossible dans une convention, actuellement. Si vous voulez que le automapper pour traiter vos collections comme des ensembles par défaut, utilisez ISet
au lieu de ICollection
.
Autres conseils
En réponse à question de Christina , vous devez créer une nouvelle classe qui implémente IAutoMappingOverride<T>
:
public class AlbumOverride : IAutoMappingOverride<Album>
{
public void Override(AutoMapping<Album> mapping)
{
mapping.HasMany(x => x.Pictures).AsSet().Inverse();
}
}
Alors dites FNH à utiliser dans la configuration:
Fluently.Configure()
.Database(...)
.Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
.UseOverridesFromAssemblyOf<Album>()))
.BuildConfiguration();
Vous aurez besoin d'une nouvelle classe de priorité pour chaque entité que vous avez besoin d'un remplacement pour, mais il est surtout une affaire de copier et coller.