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

时间:2017-07-24 22:40:22

标签: c# asp.net sql-server asp.net-mvc entity-framework

我想更新表中的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内部。 请告诉我哪里出错了。提前谢谢。

1 个答案:

答案 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)