0

データベースにトリガーが豊富にあるレガシーシステムを使用しています。

したがって、Fluent NHBにマップされたエンティティがあり、このテーブルへの挿入を実行する別のテーブルにトリガーがあるため、更新と選択のみを実行できるように強制したいと思います。

要するに、私はこのエンティティで挿入を行うことができないことを確認したいと思います。

.Not.Insert()の行に沿ったものですが、列ではなくエンティティ用です。

注:トリガーは、このようなものには不適切な選択であることがよくありますが、複雑さのため、トリガーを削除するオプションはまだありません。

これはFluentNHBで実行できますか?

4

1 に答える 1

2

簡単な(「設計された」)方法はないと思いますが、次のような選択肢が考えられます。

カスタムIEntityPersister(IClassPersister)。デフォルトのパーシスターから派生し、Insert()メソッドをオーバーライドしてNotSupportedExceptionをスローします。マッピングで構成する必要があります(このステップがFluentNHを介して実行できるかどうかはわかりません): http ://nhibernate.info/doc/nh/en/index.html#mapping-declaration-class

または、多数のテーブルのINSERTステートメントを検出できる適切なNHibernateイベントリスナーを実装し、スローすることでこれらを防止します。

または、ドメインクラスにIdプロパティのプライベート/保護されたセッターを持たせてから、マッピングを使用して、「割り当てられた」IDジェネレーターを使用する必要があることをNHibernateに通知します。NHibernateは、アプリケーションがIDを設定しない限り、そのようなオブジェクトを挿入できないようになりました。これは、保護されているため(一種の...)、決して発生しないはずです。

于 2013-01-14T18:49:19.783 に答える