我使用的是S#arpArchitecture (ASP.NET MVC和Fluent NHibernate)。我有一个如下的实体:
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属性。
发布于 2009-06-12 14:06:12
我要去point to another StackOverflow question,我认为它回答了我的问题。
发布于 2009-06-12 03:04:05
您应该使用NHibernate Interceptor来完成此任务。在拦截器实现中重写OnFlushDirty,以便仅在发生更改(即您的对象是脏的)时设置LastUpdate属性。
发布于 2013-04-17 07:14:22
由于您没有指定您的数据库类型,我将冒然为使用MySQL /MariaDB的用户添加一个解决方案:
您可以在fluent映射类中使用以下内容:
Map(y => y.LastUpdate).CustomSqlType("timestamp").Generated.Always();这将创建一个默认值为CURRENT_TIMESTAMP的MySQL时间戳列。因此,如果Nhibernate选择刷新您的实体,MySQL将确保该列被正确更新。
我非常确定这在MSSQL中不能很好地发挥作用,因为时间戳在MSSQL中是不同的野兽(here和here)。
https://stackoverflow.com/questions/984714
复制相似问题