Nos entités ont un groupe de propriétés communes. Afin de réduire le mappage répétitif, j'ai créé une classe ClassMap qui mappe les identités et les propriétés communes. Pour ClassMap de chaque entité, je viens de sous-classer la base et cela fonctionne très bien. Pour un nouveau projet, nous laissons également NH générer le schéma DB pour nous. Le problème est que l'ordre des colonnes est tel que les propriétés du ClassMap de base apparaissent en premier, suivies de tout ce qui est mappé dans la sous-classe. L'exigence pour cette construction est que les colonnes apparaissent dans un ordre spécifique.Ordre des classes et des colonnes Nhibernate fluides
Pour contourner cela, j'ai fait ce qui suit.
public class BaseMap<T> : ClassMap<T> where T : Entity
{
public BaseMap()
{
Id(x => x.Id);
MapEntity();
Map(x => x.CommonProperty1);
Map(x => x.CommonProperty2);
Map(x => x.CommonProperty3);
}
protected virtual void MapEntity()
{
}
}
public class SomeEntityMap : BaseMap<SomeEntity>
{
public SomeEntity()
{
base.MapEntity();
}
protected override void MapEntity()
{
Map(x => x.SomeEntityProperty1);
Map(x => x.SomeEntityProperty2);
Map(x => x.SomeEntityProperty3);
}
}
Cela fonctionne, mais se sent comme un hack. Mis à part le facteur de piratage, y a-t-il quelque chose qui pourrait poser problème?
?? ... SomeEntityMap ne contiendra même pas les propriétés CommonPropertyX, sans parler de l'ordre dont parle l'OP. – Yogesh
Haha. Bon appel Yogesh. SomeEntityMap hérite de ClassMap, alors que cela aurait dû être BaseMap. Avec ce changement, il inclut des propriétés communes. – mimix
+1 C'est correct. Je ne comprends pas non plus pourquoi le PO a utilisé une méthode virtuelle en premier lieu. – Groo