Ist es möglich, eine Fluent NHibernate Konvention zu verwenden, um alle ICollections als Sätze abzubilden?

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

Frage

Ist es möglich, eine Fluent NHibernate Konvention zu verwenden, um alle ICollections als Sätze abzubilden? Ich habe ein Unternehmen wie folgt:

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

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

Mit fließend Mappings, diese Eigenschaft würde als HasMany(x => x.Animals).AsSet() abgebildet werden, aber wie würde ich tun dies mit einer Konvention, dass ich verwenden möchte, mit dem AutoMapper?

Ich sollte hinzufügen, dass standardmäßig ICollections get beibehaltenen als ILists, und ich eine Besetzung Ausnahme erhalten, wenn es die HashSet zu IList zu werfen versucht.

War es hilfreich?

Lösung

Dies ist in einer Konvention nicht möglich, zur Zeit. Wenn Sie die AutoMapper wollen Ihre Sammlungen als Sätze verwenden standardmäßig ISet statt ICollection zu behandeln.

Andere Tipps

Als Reaktion auf Christina Frage , müssen Sie eine neue Klasse erstellen, die Geräte IAutoMappingOverride<T>:

public class AlbumOverride : IAutoMappingOverride<Album>
{
    public void Override(AutoMapping<Album> mapping)
    {
        mapping.HasMany(x => x.Pictures).AsSet().Inverse();
    }
}

Dann FNH sagen, dass es in der Konfiguration zu verwenden:

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

Sie müssen eine neue Überschreibung Klasse für jede Entität Sie eine Überschreibung müssen für, aber es ist vor allem eine Kopie und fügen Angelegenheit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top