2011-06-24 87 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