2010-01-02 11 views
0

Est-il possible d'utiliser une convention Fluent NHibernate pour mapper toutes les ICollections en tant qu'ensembles? J'ai une entité comme ceci:Est-il possible d'utiliser une convention Fluent NHibernate pour mapper toutes les ICollections en ensembles?

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

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

Avec applications 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, ICollections get a persisté comme ILists, et je reçois une exception casting quand il essaie de jeter le HashSet-IList.

Répondre

0

Ce n'est pas possible dans une convention, actuellement. Si vous souhaitez que l'automapper traite vos collections comme des ensembles par défaut, utilisez ISet au lieu de ICollection.

+0

Merci, j'avais le sentiment que c'était le cas. Malheureusement, 'System.Collections.Generic.HashSet' implémente directement' ICollection' et il n'y a pas de 'ISet', donc c'est soit retourner aux listes ou utiliser' Iesi.Collections.ISet' avec 'HashedSet', mais ensuite Iesi. –

+0

Vous êtes déjà couplé à Iesi.Collections en utilisant NHibernate. –

0

En réponse à Christina's question, 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(); 
    } 
} 

ensuite dire FNH utiliser dans la configuration:

Fluently.Configure() 
    .Database(...) 
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...) 
     .UseOverridesFromAssemblyOf<Album>())) 
    .BuildConfiguration(); 

Vous aurez besoin d'un nouveau Remplacer la classe pour chaque entité pour laquelle vous avez besoin d'un remplacement, mais c'est surtout une affaire de copier-coller.