Est-il possible d'utiliser une convention NHibernate Fluent carte tous les ICollections comme des ensembles?

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

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top