2

現在、私は自分のプロジェクトを、各ドメイン エンティティに対して手動で定義する従来の流暢な nhibernate スタイルからClassMap、自動マッパーにマッピングを自動生成させる方法に切り替えています。しかし、以前のクラシック マッピングと一致するように自動マッピングを微調整できるようになるまで、クラシック スタイルで既にマッピングしたクラスを使い続けたいと思います。

唯一の問題は、従来の流暢な nhibernate スタイルで既にマップされているクラスに自動マッパーがヒットすると、流暢な 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>();

誰か助けてくれませんか?

より詳しい情報:

fluent-nhibernate wiki here で言及されている手法も試しました。残念ながら、私はまだエラーが発生しています: Duplicate class/entity mapping.

4

1 に答える 1

2

ウィキの流暢なマッピングと自動マッピングの混合例は機能するはずですが、機能しない場合はバグがあります。

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

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

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

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

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

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

于 2009-10-22T09:02:57.897 に答える