Fluent NHibernateでは、自動マップタイプと非自動タイプをどのように組み合わせるのですか?
-
05-07-2019 - |
質問
今、私はプロジェクトを、ドメインエンティティごとに 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の例で機能していないことが確実な場合は、問題を提起することをお勧めします。
所属していません StackOverflow