2011-08-08 16 views
4

この問題をすばやく解決できるかどうかはわかりません。LINQタイムスタンプ - タイムスタンプ列を自動的に更新しますか?

最終更新列を持つLINQオブジェクト/テーブルは、オブジェクトが変更されるたびに更新する必要があります。

私たちはこれを解決するためのいくつかの「汚い」解決策を思いつくことができますが、正しいルートを辿るのは確実ではありません。

と言うことができる簡単な方法(LINQオブジェクトの部分、DataContextなど)はありますか?INSERT/UPDATEの場合、常に「最終更新」列をDateTime.Nowに設定しますか?

更新このテーブルの操作は、アプリケーションの何千もの場所で行われています。そのため、このオブジェクトが更新されるすべての場所を見つけることなく、LINQがこれを実行できるようにします。

答えて

4

テーブルデータが挿入/更新されるたびにこの情報を自動的に更新するトリガを作成することができます。

+0

私はこれをどこで見ることができるかについてのよい参照がありますか? – TheJediCowboy

+0

使用しているDBMSを教えてください。 –

+0

http://sqlserver2000.databases.aspfaq.com/how-do-i-audit-changes-to-sql-server-data.html – Travis

2

あなたはSQLにLINQを話していると仮定すると、あなたはたとえば...あなたがやりたいので、基本的にSubmitChangesをオーバーライドして、ことができます。もちろん

partial class YourDataContext 
{ 
    public override void SubmitChanges(ConflictMode failureMode) // don't worry, the parameterless version you know calls this one... 
    { 
     var changeSet = GetChangeSet(); 
     foreach (object insert in changeSet.Inserts) 
     { 
      // set LastUpdate property 
     } 
     foreach (object update in changeSet.Updates) 
     { 
      // set LastUpdate property 
     } 
     base.SubmitChanges(); 
    } 
} 

、「最終更新プロパティを設定する」ではありませんはコメント必然的に些細なことです。あなたは、私が数秒で思い付いたこと、それを行うことが一つの方法は、最終更新プロパティを持つインターフェイスを作成することであり、それから、すべてのLINQのオブジェクトを派生:

public interface IHasLastUpdate 
{ 
    DateTime LastUpdate { get; set; } 
} 

partial class Order : IHasLastUpdate {} 
partial class Product : IHasLastUpdate {} 
// etc 

その後、あなたは、コメント行を置き換えることができます

(insert as IHasLastUpdate).LastUpdate = DateTime.Now; 
0

と上記ビットに私は、トリガーに固執したり、主のDataContextを修正していますが、EFにしている場合、あなたはまた、次のことを試みることができると思います::

のすべてのための部分的なクラスを作成します。あなたがこれをやりたいと思っている型とその中でコンストラクタを作成するeは、イベントハンドラをpropertychangedイベントに追加し、何かが変更されたときにタイムスタンプを更新します。

関連する問題