Ist es möglich, eine Fluent NHibernate Konvention zu verwenden, um alle ICollections als Sätze abzubilden?
-
22-09-2019 - |
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.
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.