2011-06-24 129 views
5

我對Entity Framework(和asp.net mvc 3)頗爲陌生,這是我第一次使用EF4.1代碼。實體框架4.1自動日期

我的問題很簡單:當我通過模型生成我想爲數據庫中的新表,使

  1. 創建一個新的行,噹噹前日期時間自動添加一個字段。
  2. 每次更新字段時自動更新字段。

其實,出現變量,如:

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

我想我可以寫的datacontext的「OnModelCreating」事件的東西,但我太新已經掌握了這個:)

燦有人幫忙?

在此先感謝, 五

回答

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

我認爲這種方法的缺點是存儲在字段中的日期時間會指示實例何時創建,而不是何時將其保存到數據庫。這是一個小的差異,但它可能很重要,取決於您的應用程序。 – edsobo