我正在尝试编写小程序,使用 NHibernate 从代码生成我的数据库表、序列和触发器。
使用SchemaExport.Create()
方法我能够创建所有表和相关序列,但我无法创建触发器。因此,我尝试使用session.CreateSQLQuery()
运行将触发器添加到数据库的命令。
我的代码如下所示:
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>());
但这也不起作用。
有谁知道如何从代码中将触发器添加到我的数据库中?