默认情况下,每次在mvc 4实体框架中将新记录插入数据库时​​,如何插入创建日期

时间:2016-01-14 09:55:02

标签: entity-framework asp.net-mvc-4

每当我尝试将数据插入数据库时​​,我都无法获得当前日期,并且在视图中我隐藏了该特定字段。现在每当我向数据库插入一些数据时,应自动插入创建日期。

这是我的savechanges方法。

public override int SaveChanges()
 {
  var entities = ChangeTracker.Entries()
   .Where(x => x.Entity is DocumentMaster &&
   (x.State == EntityState.Added || x.State == System.Data.EntityState.Modified));

   var currentUsername = "Anonymous";
   foreach (var entity in entities)
    {
     if (entity.State == EntityState.Added)
      {
       ((DocumentMaster)entity.Entity).CreatedDate = DateTime.Now;
       ((DocumentMaster)entity.Entity).CreatedBy = currentUsername;
      }
    }
     return base.SaveChanges();
    }
  }

这是我的界面。

interface DocumentMaster
    {
        string CreatedBy { get; set; }
        DateTime CreatedDate { get; set; }
    }

这是我的班级

public partial class ts_upld_doc
    {
        public ts_upld_doc()
        {
            this.tr_upld_content = new HashSet<tr_upld_content>();
        }

        public int upld_docid { get; set; }
        public int usr_createdby { get; set; }
    public Nullable<System.DateTime> upld_createddate { get; set; }
}

我在课堂上需要ti工具界面吗?我试图实施,但它没有用。有谁能建议我这个?

2 个答案:

答案 0 :(得分:1)

详细说明“在数据库中自动设置”解决方案:

在实体模型类中设置CreationDate属性:

public class MyPersistableEntity {

    public MyPersistableEntity() {
        // initialize in ctor so behaviour is the same for freshly created and loaded entities
        CreationDate = DateTime.Now;
    }

    [Required, DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime CreationDate { get; set; }
}

告诉SQL Server在实体迁移中使用此列的默认值:

public partial class UseUtcDateAsDefault : DbMigration {
    public override void Up() {
        // auto generated date for CreationDate
         AlterColumn("dbo.MyPersistableEntity ", "CreationDate", 
             c => c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"));
    }
}

答案 1 :(得分:0)

上面的解决方案很好并且工作正常但是如果你更新相同的记录,那么日期将被修改为最新的日期和时间。 我有简单的解决方案。在创建视图中,写下以下代码:

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

并在控制器中,只需传递新对象:

public ActionResult Create()
        {
            return View(new MaterialType());
        }

避免在编辑视图中修改日期:

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

无需覆盖任何方法。