NHibernate +默认的getdate()列

时间:2009-07-17 19:25:43

标签: sql-server-2005 nhibernate nhibernate-mapping

如何配置NHibernate以使用如下列创建db模式:

create_dt datetime not null default getdate()

我在映射文件中有这个:

<property name="create_dt" update="false" insert="false" generated="insert" not-null="true" />

无论如何我可以注入特定于SQL的服务器default getdate()generated properties的文档甚至提到了这就是你如何处理create_date字段。我只是不确定如何正确生成我的数据库模式。我是否必须手动编辑创建表脚本?

类似question

编辑:我发现我总是可以像这样更改表架构:

<database-object>
    <create>ALTER TABLE Report ADD CONSTRAINT DF_report_create_dt DEFAULT getdate() FOR create_dt;</create>
    <drop></drop>
  </database-object>

我可以以相同的方式为update_dt类型的字段添加触发器。这似乎比提供使用getdate()的显式插入和更新语句更好。

2 个答案:

答案 0 :(得分:4)

我总是喜欢使用NHibernate Event系统设置审计属性,如创建日期或更新日期。 (参见事件系统文档here)。

我更喜欢这种方法,因为它保留了我的数据库层的逻辑,但它使我能够在我的代码中有一个负责设置这些值的位置。如果我的所有实体都有一个共同的基类,那么我甚至可以保证整个域中的一致行为。

答案 1 :(得分:2)

这是Hibernate线程的答案......它应该移植到nHibernate而不改变它......

https://forum.hibernate.org/viewtopic.php?f=25&t=996901&view=previous

请看最后一篇文章。

如果失败了,我总是在类的构造函数中生成对象的“创建日期”:

public class MyClass
{
    private DateTime createdDate;

    public MyClass()
    {
        createdDate = DateTime.Now;
    }
}