Fluent NHibernateでは、自動マップタイプと非自動タイプをどのように組み合わせるのですか?

StackOverflow https://stackoverflow.com/questions/1603460

質問

今、私はプロジェクトを、ドメインエンティティごとに ClassMap を手動で定義する従来の流nなnhibernateスタイルから、自動マッパーがマッピングを自動生成するように切り替えています。ただし、古いクラシックマッピングに一致するように自動マッピングを調整できるようになるまで、クラシックスタイルで既にマップしたクラスを使用し続けたいと思います。

唯一の問題は、従来の流fluentなnhibernateスタイルで既にマップされているクラスに自動マッパーがヒットすると、流fluentなnhibernateがクラッシュすることです。

ここに私の AutoPersistenceModel 設定コードがあります:

_autoPersistenceModel = AutoMap.AssemblyOf<DomainEntity>();
_autoPersistenceModel.AddMappingsFromAssembly(typeof (PlayerPersistenceMap).Assembly);

_autoPersistenceModel.Alterations(x =>
                    x.Add<AutoMappingAlteration>())
                .Setup(s =>
                {
                    s.FindIdentity = type => type.Name == "ID";

                    s.IsBaseType = type => (type == typeof(DomainEntity));
                })
                .Conventions
                    .AddFromAssemblyOf<IdentityColumnConvention>()
                    .UseOverridesFromAssemblyOf<PlayerMappingOverride>();

ここで誰か助けてもらえますか?

詳細:

流れるようなnhibernate wiki こちらに記載されている手法も試しました。残念ながら、重複したクラス/エンティティマッピングというエラーが引き続き表示されます。

役に立ちましたか?

解決

ウィキの混合流マッピングと自動マッピングの例が機能する場合バグがあります。

回避策として、自動マッピングから手動でマッピングされたタイプを除外します。 Wikiの例に示されているように、 Where メソッドを使用して、次のようにします。

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => type != typeof(OneOfYourManuallyMappedClasses));

流なマッピングがたくさんある場合は、自動マッピング設定をクリーンに保つためにコレクションを作成できます:

var mappedTypes = new[] { typeof(One), typeof(Two) };

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => !mappedTypes.Contains(type));

繰り返しますが、これは必要ではありませんが、Wikiの例で機能していないことが確実な場合は、問題を提起することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top