4

以下に説明する継承があります:

public abstract class BaseEntity<TId> {....}

public abstract class ModelEntity : BaseEntity<Int32>{....}

public abstract class AuditableEntity : ModelEntity,IAuditable{....}

public class ApplicationUser : AuditableEntity{....}

public class SuperUser : ApplicationUser

NHibernate 3.3 を使用しており、その継承のマッピングを作成したい

public abstract class ModelEntityMap<TEntity> : ClassMapping<TEntity>
        where TEntity : ModelEntity
{...}

public class AuditableEntityMap<TEntity> : ModelEntityMap<TEntity> where TEntity : AuditableEntity
{ ...}

public class ApplicationUserMap : AuditableEntityMap<ApplicationUser>
{...}

public class SuperUserMap : JoinedSubclassMapping<SuperUser>{...}

アプリケーションが起動してデータベースをセットアップしようとすると、次の例外が発生します。 SuperUser のあいまいなマッピング 複数のルート エンティティが見つかりました BaseEntity / ApplicationUser

考えられる解決策 - ルート エンティティのマッピングを階層内の実際のルートを表すものにマージします - 実際のルート エンティティを検出するロジックを IModelInspector に挿入します。

私は同じ継承でFluent nhibernateを使用していましたが、パブリッククラスとして定義された SuperUserMap で正常に動作しました SuperUserMap : SubClassMap {...}

コードによる Nhibernate マッピングは初めてで、かなり混乱しています !!!

4

3 に答える 3

0

この問題を解決するには 2 つの方法があると思います。列と識別子列。これがマルチレベル継承でどのように機能するかはわかりませんが、これはググることができるものです。

b) 彼が継承をどのように扱っているかについてのこの投稿を見てください: http://fabiomaulo.blogspot.co.nz/2011/04/nhibernate-32-mapping-by-code_13.html問題。

于 2012-05-19T10:29:46.997 に答える