如何在 mvc 代码中更新数据库列 asp.net 日期和时间



我想更新表中的修改日期时间列,因为有任何更改或更新发生。 我创建了一个界面

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 内部。 请告诉我哪里出错了。提前谢谢你。

在这里,我得到了我的问题的解决方案。它很简单,无需使用任何界面。 我在模型中创建了一个分部类并覆盖了 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;
}
}
}
}

在编辑视图中,我添加了一行,该行不会在更新时使输入日期时间戳字段为空。

@Html.HiddenFor(model => model.EntryDateTimeStamp, Model.EntryDateTimeStamp = Model.EntryDateTimeStamp)

最新更新