首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluent-NHibernate与DateTime自动持久化

Fluent-NHibernate与DateTime自动持久化
EN

Stack Overflow用户
提问于 2009-06-12 02:16:09
回答 3查看 1.3K关注 0票数 2

我使用的是S#arpArchitecture (ASP.NET MVC和Fluent NHibernate)。我有一个如下的实体:

代码语言:javascript
复制
public class User : Entity
{
    public User(){}
    public User(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual DateTime? LastUpdate{ get; set; }
}

我将在我的存储库类上调用SaveOrUpdate方法,该方法将持久化这个用户对象。它起作用了。如何使用最新的日期和时间自动保持LastUpdate属性?我可以通过总是将LastUpdate属性设置为当前日期和时间来覆盖我的存储库中的SaveOrUpdate方法,但这似乎是不正确的,因为如果我的实体中没有任何更改,我认为NHibernate不会将我的对象持久化回DB,强制设置此属性将始终使其持久化。

仅当实体中的其他内容发生更改时,我才需要设置此LastUpdate属性。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-12 14:06:12

我要去point to another StackOverflow question,我认为它回答了我的问题。

票数 0
EN

Stack Overflow用户

发布于 2009-06-12 03:04:05

您应该使用NHibernate Interceptor来完成此任务。在拦截器实现中重写OnFlushDirty,以便仅在发生更改(即您的对象是脏的)时设置LastUpdate属性。

票数 1
EN

Stack Overflow用户

发布于 2013-04-17 07:14:22

由于您没有指定您的数据库类型,我将冒然为使用MySQL /MariaDB的用户添加一个解决方案:

您可以在fluent映射类中使用以下内容:

代码语言:javascript
复制
Map(y => y.LastUpdate).CustomSqlType("timestamp").Generated.Always();

这将创建一个默认值为CURRENT_TIMESTAMP的MySQL时间戳列。因此,如果Nhibernate选择刷新您的实体,MySQL将确保该列被正确更新。

我非常确定这在MSSQL中不能很好地发挥作用,因为时间戳在MSSQL中是不同的野兽(herehere)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/984714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档