2009-06-12 9 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が自分のオブジェクトをDBと強制的にこのプロパティの設定は、常にそれを維持し続ける。

私のエンティティで他の何かが変更された場合にのみ、このLastUpdateプロパティセットが必要です。

答えて

1

これを達成するにはNHibernate Interceptorを使用する必要があります。インタラプタ実装でOnFlushDirtyをオーバーライドして、何かが変更されたとき(オブジェクトが汚れているとき)のみLastUpdateプロパティを設定します。

1

私は自由を取るとMySQL/MariaDBを使用して人々のためのソリューションを追加し、データベースのタイプを指定していないので:

あなたは流暢なマッピングクラスに次のように使用することができます。

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

これは、既定値がCURRENT_TIMESTAMPのMySQL TIMESTAMP列を作成します。したがって、Nhibernateがエンティティをフラッシュすることを選択した場合、MySQLはカラムが正しく更新されることを確認します。

私はタイムスタンプがMSSQLの異なる獣(​​とhere)されているとして、これはMSSQLとうまく再生されないかなり確信して

関連する問題