gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:10:06 26 4
gpt4 key购买 nike

考虑以下简单的 C# 类:

public class Entity
{
public Entity() { }
public virtual int Id { get; private set; }
public virtual DateTime DateCreated { get; private set; }
}

使用以下简单的 NHibernate 映射进行映射:
<class name="Entity" mutable="false">
<id name="Id">
<generator class="native">
</id>
<property name="DateCreated"/>
</class>

到以下简单的数据库架构:
CREATE TABLE Entity (
Id int IDENTITY(1,1) PRIMARY KEY,
DateCreated datetime NOT NULL DEFAULT getUtcDate()
)

创建 Entity 的新实例时并保存到数据库中,如何指示NHibernate 使用数据库的默认值 DateCreated列,如果其值为 null ?或者,我如何指定 NHibernate 应该使用 getUtcDate() 的结果函数作为 DateCreated 的值插入时的字段?

虽然我可以轻松添加
DateCreated = DateTime.Now;

进入实体构造函数,这是使用应用程序服务器的本地时钟,我需要使用数据库的本地时钟来确保当有多个应用程序服务器各自具有潜在的非同步本地时钟时的一致性。

最佳答案

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

NHibernate Mapping - property

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

generated="insert"

这样 NHibernate 就知道在 INSERT 之后它必须刷新实体,但在更新 DateCreated 之后不会改变。

您可能还必须指定:
update="false" insert="false"

我从来没有使用过生成的,我不确定 NHibernate 是否推断设置这些,或者你必须明确地这样做。

关于nhibernate - NHibernate 如何在保存新实体时使用数据库默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1126610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com