2009-06-12 86 views
2

我使用S#arpArchitecture(ASP.NET MVC和Fluent NHibernate)。我有一個實體如下:Fluent-NHibernate和自動保存DateTime

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會將我的對象保留回數據庫並強制設置此屬性將始終使其保持回來。

我只想要這個LastUpdate屬性集,如果其他東西在我的實體中發生了變化。

回答

1

您應該使用NHibernate Interceptor來完成此操作。在您的攔截器實現中重寫OnFlushDirty,以便僅當某些內容發生更改(即您的對象很髒)時才設置LastUpdate屬性。

1

既然你沒有指定數據庫類型,我就冒昧,並添加一個解決方案,使用MySQL/MariaDB的人:

你可以用你的流利的映射類以下內容:

Map(y => y.LastUpdate).CustomSqlType("timestamp").Generated.Always(); 

這將創建一個默認值爲CURRENT_TIMESTAMP的MySQL TIMESTAMP列。因此,如果Nhibernate選擇刷新實體,MySQL將確保該列已正確更新。

我敢肯定,這不符合MSSQL發揮以及時間戳在MSSQL不同的東西(​​和here