我想更新表中的ModifiedDateTime列,因为发生了任何更改或更新。 我创建了一个界面
public interface ITimeStampedEntity
{
Nullable<System.DateTime> EntryDateTimeStamp { get; set; }
Nullable<System.DateTime> ModifiedDateTime { get; set; }
}
在我的模型中,我写道:
public partial class MaterialType : ITimeStampedEntity
{
//other columns
public Nullable<System.DateTime> EntryDateTimeStamp { get; set; }
public Nullable<System.DateTime> ModifiedDateTime { get; set; }
}
我在dbcontext中有代码,如下所示正在编译但无法正常工作。
public Test_Gen3_AtlasEntities()
: base("name=Test_Gen3_AtlasEntities")
{
HookSaveChanges();
}
private void HookSaveChanges()
{
(this as IObjectContextAdapter).ObjectContext.SavingChanges += (sender, e) =>
{
OnSavingChanges();
};
}
public override int SaveChanges()
{
OnSavingChanges();
return base.SaveChanges();
}
private void OnSavingChanges()
{
DateTime now = DateTime.UtcNow;
this.ChangeTracker.DetectChanges();
foreach (var item in this.ChangeTracker.Entries())
{
ITimeStampedEntity ts = item.Entity as ITimeStampedEntity;
if (ts != null)
{
if (item.State == EntityState.Added)
{
ts.EntryDateTimeStamp = DateTime.Now;
ts.ModifiedDateTime = ts.EntryDateTimeStamp;
}
else if (item.State == EntityState.Modified)
{
ts.ModifiedDateTime = DateTime.Now;
}
}
}
}
ts的值为null并且不在IF内部。 请告诉我哪里出错了。提前谢谢。
答案 0 :(得分:0)
我在这里找到了解决问题的方法。没有使用任何界面它很简单。 我在Model中创建了一个部分类,并重写了SaveChanges()方法。
public partial class DataBaseEntities : DbContext
{
public override int SaveChanges()
{
foreach (var entry in this.ChangeTracker.Entries<ModelName>().ToList())
{
if (entry.State == System.Data.Entity.EntityState.Added)
{
entry.Entity.EntryDateTimeStamp = DateTime.Now;
}
else if (entry.State == System.Data.Entity.EntityState.Modified)
{
entry.Entity.ModifiedDateTime = DateTime.Now;
}
}
}
}
在编辑视图中,我添加了一行,在更新时不会使entrydatetimestamp字段为空。
@Html.HiddenFor(model => model.EntryDateTimeStamp, Model.EntryDateTimeStamp = Model.EntryDateTimeStamp)