E 'possibile utilizzare una convenzione Fluent NHibernate per mappare tutti i ICollections come set?

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

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top