6

私は、設定より規約を強調するSharp Architecture Liteで遊んでおり、NHibernateがどのように機能するかを理解しようとしていますConventionModelMapper。具体的には、以下のIsRootEntityメソッドとIsEntityメソッドの違いがわかりません(BTWEntityは、Sharp Archに付属する抽象クラスです)。

     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;
            }
    }

IsEntityこのメソッドは、どのクラスがDBへのマッピング/永続化に適格であるかをNHibernateに伝えるために使用されていることを収集します。しかし、私は一生の間、そのIsRootEntity方法が何をするのか理解できません。周りのドキュメントConventionModelMapperはひどくまばらです。

4

1 に答える 1

1

ケースを検討する場合:

class B : Entity { ... }
class A : B { ... }

それらをマッピングする場合、AとBの両方がエンティティであり(IsEntityはそれらに対してtrueを返す必要があります)、NHibernateはAをBのサブクラスとしてマッピングします。ただし、エンティティ自体はすべてのエンティティ(通常はこの基本クラスをマップしたくない場合)、IsRootEntityはEntityに対してtrueを返し、そのすべてのサブクラスに対してfalseを返します-したがって、Entityは「ルート」クラスであるためマップされるべきではないことを示します

于 2012-10-23T09:02:59.713 に答える