Używam Sharp Architecture Lite, która kładzie nacisk na konwencję na konfigurację i próbuje zrozumieć, jak działa NHibernate ConventionModelMapper
. W szczególności, nie mogę powiedzieć różnicę między IsRootEntity & metody IsEntity poniżej (BTW, Entity
jest klasą abstrakcyjną, że statki z ostrymi Arch):NHibernate ConventionModelMapper; Jaka jest różnica między IsRootEntity i 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;
}
}
wnoszę, że metoda IsEntity
służy powiedzieć NHibernate, które klasy kwalifikują się do mapowania/trwałości do bazy danych. Jednak nie mogę dla całego życia dowiedzieć się, co robi metoda IsRootEntity
. Dokumentacja około ConventionModelMapper
jest żałośnie rzadka.
Dla twojej sprawy IsEntity() powinna zwracać wartość true dla A i B, podczas gdy IsRootEntity powinna zwracać wartość true tylko dla B. IsRoot Podmiot() powinien być podrzędnym zbiorem IsEntity() i jest używany tylko do kontrolowania mapowania dziedziczenia klas. Na przykład, jeśli ustawisz IsRootEntity na wartość true dla A i B, mapowane będą wszystkie ich właściwości jako dwie oddzielne klasy. – dotjoe