2011-06-24 30 views
5

私はEntity Framework(とasp.net mvc 3)にはかなり新しく、これは最初のEF4.1コードの最初の経験です。Entity Framework 4.1自動日付

私の質問は単純です:私はモデルを経て、私は新しい行が作成されたときに

  1. が自動的にフィールドに現在の日時を追加したいと思いデータベースの新しいテーブルを生成するとき。
  2. フィールドが更新されるたびにフィールドを自動的に更新します。

実は、変数は次のように表示されます:私はのDataContextの「OnModelCreating」イベントで何かを書くことができると思いますが、私はすでにこれを習得するにはあまりにも新しいです:)

できます

[DisplayName("Data Modifica")] 
[DataType(DataType.DateTime)] 
[DisplayFormat(DataFormatString = "{0:d}")] 
public DateTime DataModifica { get; set; } 

誰かが助けますか?事前に

おかげで、モデルの作成とは何の関係もありません V.

答えて

10

。 「モデル」は、クラスとデータベースの間のマッピングの記述です。 OnModelCreatingはマッピング定義を変更するために使用され、データは変更されません。エンティティインスタンス自体のデータとは関係ありません。

あなたが自動修正をしたい場合は、SaveChangesを上書きすることができます。

public override int SaveChanges() 
{ 
    DateTime now = DateTime.Now; 
    foreach (var entity in ChangeTracker.Entries<YourEntityType>() 
             .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified) 
             .Select(e => e.Entity)) 
    { 
      entity.DateModifica = now; // set the date 
    } 

    return base.SaveChanges(); 
} 
+0

ありがとうございます。それは私が必要とするものです。 – Valerio

0

デフォルト値に初期化されたバッキングフィールド、と一つとプロパティを定義しないのはなぜ?

private DateTime _dateOfRequest = DateTime.Today; 
    [Display(Name = "Date of Request"), DataType(DataType.Date)] 
    public System.DateTime DateOfRequest { 
     get { return _dateOfRequest; } 
     set { _dateOfRequest = value; } 
    } 
+2

私は、このアプローチの欠点は、フィールドに格納されているdatetimeがインスタンスが作成されたときを示し、データベースに永続化されたときではないということです。小さな違いですが、アプリケーションによっては重要なこともあります。 – edsobo