2

これには頭を悩ませているので、ここで別の目が助けてくれることを願っています。

設定:

すべてのデータ転送オブジェクトが使用する DomainEntity という基本クラスがあります。基本的に Id (整数) と呼ばれるプロパティのみを定義します。

データ転送オブジェクトがあります: ブログ、投稿、ユーザー DomainEntity は名前空間 Core.Domain にあり、データ転送オブジェクトは Core.Domain.Model の下にあります

次のセッション ビルダー コードがあります。

return Fluently.Configure()
    .Database(SQLiteConfiguration.Standard.UsingFile("c:\blog.db"))
    .Mappings(x => x.AutoMappings.Add(
        AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>()
            .Where(type => 
                type.Namespace.EndsWith("Domain.Model") &&
                !type.IsAbstract &&
                type.IsClass &&
                type.GetProperty("Id") != null)    
     )).BuildSessionFactory();

単純なクエリをテストしようとすると、上記のコード (どこか) でアプリケーション例外が発生し、エラー メッセージは次のようになります。

System.ApplicationException: 'Core.Domain.DomainEntity' のマッピング ドキュメントの構築中にエラーが発生しました ---> NHibernate.MappingException: マッピング ドキュメントをコンパイルできませんでした: (XmlDocument) ---> System.IndexOutOfRangeException: インデックスが配列の境界。

私のコード/NHibernate が DomainEntity をマップしようとしているようですが、失敗しています。上記のコードは、type.Namespace.EndsWith("Domain.Model") を使用してそのオブジェクトをマップしないように明示的に述べていると思いました。あれは正しいですか?ここでどこに迷うのですか?

助けてくれてありがとう。

4

1 に答える 1

3

次の行を忘れたようです:

.WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity))

したがって、全体として、私の新しい自動マッピング コードは次のようになります。

return Fluently.Configure()
                .Database(SQLiteConfiguration.Standard.UsingFile("c:\\blog.db"))
                .Mappings(x => x.AutoMappings.Add(
                   AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>()
                       .WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity))
                       .Where(type =>
                           type.Namespace.EndsWith("Domain.Model") &&
                           !type.IsAbstract &&
                           type.IsClass &&
                           type.GetProperty("Id") != null)
                   )).BuildSessionFactory();

これで私のエラーは解消されたようです。

于 2009-05-29T01:30:23.227 に答える