首页 文章

如何使用NHibernate架构导出生成Oracle触发器?

提问于
浏览
3

假设我们正在开发一个数据层,我们遵循“代码优先”原则 . 使用SchemaExport从模型生成数据库 . 我想实现以下身份生成方案:

  • 每个表都有自己的序列和触发器

  • 触发器的类型为"for each row",并在将数据插入表时插入下一个序列值 .

NHibernate通过使用(流利的)支持这种方法

Id(x=>x.Id).GeneratedBy.TriggerIdentity();

但是当我将SchemaExport设置为文件时,既不会生成序列,也不会生成触发器 . 如何告诉NHibernate发布用于创建TRIGGER和相应SEQUENCE的DDL代码?

1 回答

  • 2

    您应该明确告诉NH您希望它为您创建的附加对象 . 据我所知,流利的NH不允许您直接配置辅助数据库对象 . 将项目.hbm.xml文件添加到项目中作为嵌入式资源

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <database-object>
        <create>
            create ...
        </create>
        <drop>
            drop ...
        </drop>
    </database-object>
    </hibernate-mapping>
    

    然后告诉流利的NH选择它

    .Mappings(m =>
    {
        m.HbmMappings.AddFromAssemblyOf<...>();
             ... 
    })
    

    SchemaExport将在导出模式时执行创建和删除部分 .

相关问题