Asp.net mvc 3 实体框架4.1自动日期
我对Entity Framework(以及asp.net mvc 3)非常陌生,这是我第一次真正体验EF4.1代码优先 我的问题很简单:当我通过模型为数据库生成一个新表时,我想创建一个新表Asp.net mvc 3 实体框架4.1自动日期,asp.net-mvc-3,entity-framework-4.1,Asp.net Mvc 3,Entity Framework 4.1,我对Entity Framework(以及asp.net mvc 3)非常陌生,这是我第一次真正体验EF4.1代码优先 我的问题很简单:当我通过模型为数据库生成一个新表时,我想创建一个新表 创建新行时自动将当前日期时间添加到字段 每次更新字段时自动更新该字段 实际上,该变量看起来像: [DisplayName("Data Modifica")] [DataType(DataType.DateTime)] [DisplayFormat(DataFormatString = "{0:d}")]
[DisplayName("Data Modifica")]
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime DataModifica { get; set; }
我想我可以写一些关于datacontext的“OnModelCreating”事件的东西,但我太新了,还不能掌握这个:)
有人能帮忙吗
提前感谢,,
V.这与模型的创建无关。“模型”是类和数据库之间映射的描述
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();
}
public override int SaveChanges()
{
DateTime now=DateTime.now;
foreach(ChangeTracker.Entries()中的var实体)
.Where(e=>e.State==EntityState.Added | | e.State==EntityState.Modified)
.选择(e=>e.Entity))
{
entity.DateModifica=now;//设置日期
}
返回base.SaveChanges();
}
为什么不将属性定义为带有备份字段的属性,该字段已初始化为默认值
private DateTime _dateOfRequest = DateTime.Today;
[Display(Name = "Date of Request"), DataType(DataType.Date)]
public System.DateTime DateOfRequest {
get { return _dateOfRequest; }
set { _dateOfRequest = value; }
}
非常感谢。这正是我所需要的。我认为这种方法的缺点是,存储在字段中的日期时间将指示实例的创建时间,而不是实例被持久化到数据库的时间。虽然差别很小,但可能很重要,具体取决于您的应用程序。