NHibernateを使用して、コードからDBテーブル、シーケンス、トリガーを生成する小さなプログラムを作成しようとしています。
メソッドを使用SchemaExport.Create()
すると、すべてのテーブルと関連するシーケンスを作成できましたが、トリガーを作成できませんでした。そのためsession.CreateSQLQuery()
、DBにトリガーを追加するコマンドを実行するために使用しようとしました。
私のコードは次のようになります。
string createTriggerQuery= @"create or replace trigger table_insert_trigger before insert on Table for each row begin select TableSequence.nextval into :new.ID from dual; end;";
var query = session.CreateSQLQuery(createTriggerQuery);
query.ExecuteUpdate();
クエリはで実行すると機能しますOracle SQL Developer
が、コードを実行すると次の例外が発生します。
Could not execute native bulk manipulation query:create or replace trigger... [SQL: SQL not available]
また、HBMクエリを使用してクエリを作成しようとしました。XMLファイルを埋め込みリソースとしてプロジェクトに追加し、その上に次のコードを追加します。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<database-object>
<create>
create or replace
trigger table_insert_trigger before insert on table
for each row
when (new.ID is NULL)
begin
select tableSequence.nextval into :new.ID from dual;
end;
</create>
メンバーで、FluentConfiguration
hbmマッピングを追加するように構成しました。
_fluentConfiguration.Mappings(m => m.HbmMappings.AddFromAssemblyOf<DbContextFactory>());
しかし、それも機能していませんでした。
コードからDBにトリガーを追加する方法を知っている人はいますか?