¿Es posible utilizar una convención Fluido NHibernate para mapear todos los ICollections como conjuntos?
-
22-09-2019 - |
Pregunta
¿Es posible utilizar una convención Fluido NHibernate para mapear todos los ICollections como conjuntos? Tengo una entidad de esta manera:
public class NoahsArk
{
public virtual ICollection<Animal> Animals { get; set; }
public NoahsArk()
{
Animals = new HashSet<Animal>();
}
}
Con las asignaciones de fluidez, esta propiedad se asigna como HasMany(x => x.Animals).AsSet()
, pero ¿cómo iba a hacer esto con una convención que quiero usar con el AutoMapper?
Debería añadir que, por defecto, ICollections
get persistido como ILists
, y obtener una excepción de difusión cuando se trata de emitir el HashSet
a IList
.
Solución
Esto no es posible en una convención, en la actualidad. Si desea que el AutoMapper para tratar sus colecciones como conjuntos por defecto, en lugar de uso ISet
ICollection
.
Otros consejos
En respuesta a Christina pregunta , usted tiene que crear una nueva clase que implementa IAutoMappingOverride<T>
:
public class AlbumOverride : IAutoMappingOverride<Album>
{
public void Override(AutoMapping<Album> mapping)
{
mapping.HasMany(x => x.Pictures).AsSet().Inverse();
}
}
A continuación, decirle a la HNF para usarlo en la configuración:
Fluently.Configure()
.Database(...)
.Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
.UseOverridesFromAssemblyOf<Album>()))
.BuildConfiguration();
Usted necesitará una nueva clase de anulación para cada entidad que necesita un reemplazo para, pero es sobre todo un asunto de copiar y pegar.