Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存新实体时,NHibernate如何使用数据库默认值?_Nhibernate - Fatal编程技术网

保存新实体时,NHibernate如何使用数据库默认值?

保存新实体时,NHibernate如何使用数据库默认值?,nhibernate,Nhibernate,考虑以下简单的C类: 使用以下简单的NHibernate映射进行映射: <class name="Entity" mutable="false"> <id name="Id"> <generator class="native"> </id> <property name="DateCreated"/> </class> 创建实体的新实例并保存到数据库时,如果DateCreated列

考虑以下简单的C类:

使用以下简单的NHibernate映射进行映射:

<class name="Entity" mutable="false">
    <id name="Id">
        <generator class="native">
    </id>
    <property name="DateCreated"/>
</class>
创建
实体的新实例
并保存到数据库时,如果
DateCreated
列的值为
null
,如何指示NHibernate使用数据库的默认值?或者,如何指定NHibernate在插入时使用
getUtcDate()
函数的结果作为
DateCreated
字段的值

虽然我可以很容易地补充

DateCreated = DateTime.Now;

在实体构造函数中,这是使用应用程序服务器的本地时钟,我需要使用数据库的本地时钟,以确保多个应用程序服务器的本地时钟可能不同步时的一致性。

您可以指定该属性由数据库生成:

因此,对于您的情况,您需要指定:

generated="insert"
update="false" insert="false"
通过这种方式,NHibernate知道在插入之后必须刷新实体,但在更新之后,DateCreated将不会更改

您可能还必须指定:

generated="insert"
update="false" insert="false"

我从未使用过generated,我不确定NHibernate是否推断要设置它们,或者您必须显式地进行设置。

我也有类似的问题。我必须将属性
dynamic insert=“true”
添加到我的类映射中。
从文件中:

dynamic-insert (optional - defaults to false): specifies that INSERT SQL should be generated at runtime and contain only the columns whose values are not null.

不知道我怎么会在文档()中遗漏了这一点;我发誓我至少看了两次,一定是盯着它看的。我更喜欢你的文档链接。我需要开始让NH Forge成为一个常规站点。不幸的是,这并不能完全回答这个问题。虽然它适用于插入,但对于更新,您需要使用数据库触发器。NHibernate仍然不会将“DEFAULT”或“GETUTCDATE()”作为UDPATE的一部分发送。@JosephDaigle SQL Server中的默认值仅用于插入的行。一旦插入,SQL Server就不知道带有空值列的更新是否是有意的,也不会猜测。无法回答nhibernate问题,但通常情况下,您希望将日期存储在数据库中作为UTC。无论其来源如何,UTC在所有服务器上都是相同的(假设时钟是准确的)。一般来说,是的,同意。这就是我在问题中指定getUtcDate()而不是getDate()的原因。:)