如何配置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()的显式插入和更新语句更好。
答案 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;
}
}