2009-08-18 9 views
2

データベースには、datetime型のLastEditTime列があります。私は最後の行の更新/挿入時間を追跡するためにこれを使用しました。 Linqは、その列にnullを挿入できないと主張して例外をスローします。行の最後の編集時間をLinqに強制的に更新させるには?

もちろん、LastEditTime列はNULLではないため、例外が予想されます。私の手でクエリ挿入がgetutcdate()を生成しました。 Linqに同様のことをどうやって依頼できますか?

答えて

2

テーブルの部分クラスを作成します。部分クラスでは、次があります。

public partial class MyTable{ 

    partial void OnValidate(System.Data.Linq.ChangeAction action) 
    { 
     LastEditTime = DateTime.Now; 
    } 
} 

OnValidateは常にdatabase.submitchanges()を実行する前に呼び出され

+0

私はそれを並行性チェックに使用しましたので、ローカルで変更することはできません。 – Rajesh

1

最も簡単な答えは、データベースに、すなわちGETDATEフィールドのデフォルト値を割り当てることであろう()。空白の場合のみ、フィールドに現在の時刻/日付が入力されます。

Linq to SQLはSQLの上にあるアクセスレイヤーなので、その点ではかなり愚かなので、Linq to SQLクラスを自分で作成するか、オブジェクトインスタンスの作成時に値を入力する必要がありますあなたはDBに追加しています。

レコードを更新するたびに自動的に更新されて同時性が確保されるようなものを探している場合は、タイムスタンプフィールドタイプを調べてください。

+0

私は同意します - データベースに作業をさせてください。 – belugabob

+0

@belugabobデータベースは挿入時にのみ動作します。 – Rajesh

+0

これはUPDATEsでないINSERTに対してのみ機能します –

0

データベースにトリガーを作成し、更新アクションに割り当てることができます。私はそれが動作することを知って、我々は私たちのPostgresデータベース上でこれをすべて行う。

SQL Serverにトリガがあるかどうかはわかりませんが、ストアドプロシージャを使用できます。

関連する問題