0

Fluent NHibernate を使用しています。同じデータベースを使用するアプリケーションがいくつかあります (主に、アプリケーション自体と、そのための構成およびレポート ツールで、別の .exe です)。それらは現在、共通の .dll で流暢に定義された同じマッピングを共有しています。それらの大きな違いは、データベースの一部の使用方法が大きく異なることです。あるツールでは読み取り専用ですが、別のツールでは読み取りと書き込みが可能なテーブルがいくつかあります。ツールが「間違った」テーブルにデータを書き込まないようにしたいと思います。

私の考えは、各ツールの各マッピングを少し異なるものにすることです。マッピングの一般的なベースは同じですが、マッピング構成を実行しているツールの名前をチェックする拡張メソッドを追加し、ツールごとに異なるいくつかのマッピング仕様を追加できます。

  • 一部のツールでは、一部のテーブルを .ReadOnly() (mutable="false") にしたい
  • ツールごとにカスケードのオン/オフを切り替える必要があります。

しかし、私が正しいと思うかどうか、私は少し確信が持てません。それに関する落とし穴はありますか?これを達成するためのより良い方法はありますか?

4

1 に答える 1

1

オプション1

呼び出し元に応じてそれらを変更するすべてのマッピングを返すメソッドを作成し、マッピングを手動でコンテキストに追加できます

public IEnumerable<IMappingProvider> GetAllMappings(MappingMode mode)
{
    yield return new UserMap();

    var fooMap = new FooMap();
    if (mode == MappingMode.Reporting)
        fooMap.ReadOnly();
    yield return fooMap
}

var model = new PersistenceModel();
foreach (var mapping in GetAllMappings(mappingMode)
{
    model.Add(mapping);
}

Fluently.Configure().Mappings(m => m.UsePeristenceModel(model))

オプション 2

マッピングを変更するアプリに応じてカスタム規則を追加します

于 2013-07-19T07:13:00.963 に答える