Sto giocando con Sharp Architecture Lite, che enfatizza la convenzione sulla configurazione e cercando di capire come funziona l'NHibernate ConventionModelMapper
. In particolare, non riesco a capire la differenza tra l'IsRootEntity & metodi IsEntity di seguito (a proposito, Entity
è una classe astratta che viene fornito con Sharp Arco):NHibernate ConventionModelMapper; Qual è la differenza tra IsRootEntity e IsEntity
internal static class Conventions
{
public static void WithConventions(this ConventionModelMapper mapper, Configuration configuration) {
Type baseEntityType = typeof(Entity);
mapper.IsEntity((type, declared) => IsEntity(type));
mapper.IsRootEntity((type, declared) => baseEntityType.Equals(type.BaseType));
public static bool IsEntity(Type type) {
return typeof(Entity).IsAssignableFrom(type)
&& typeof(Entity) != type
&& !type.IsInterface;
}
}
ho capito che il metodo IsEntity
viene usata per dire che NHibernate le classi sono idonee per mappatura/persistenza nel DB. Tuttavia, non riesco a capire come funziona il metodo IsRootEntity
. La documentazione intorno a ConventionModelMapper
è tristemente sparsa.
Per il tuo caso, IsEntity() deve restituire true per A e B, mentre IsRootEntity deve restituire true solo per B. IsRoot Entity() dovrebbe essere un sottoinsieme di IsEntity() e viene utilizzato solo per controllare il mapping dell'ereditarietà delle classi. Ad esempio, se si imposta IsRootEntity su true per entrambi A e B, verranno mappate tutte le loro proprietà come due classi separate. – dotjoe