Sql server DateCreated在编辑时为空
我正在尝试我的手在ef代码第一和运行的问题 我有一个界面IAuditable:Sql server DateCreated在编辑时为空,sql-server,entity-framework,asp.net-mvc-4,ef-code-first,Sql Server,Entity Framework,Asp.net Mvc 4,Ef Code First,我正在尝试我的手在ef代码第一和运行的问题 我有一个界面IAuditable: public interface IAuditable { DateTime? DateCreated { get; set; } DateTime? DateModified { get; set; } } 我有我的模型: public class Tip : IAuditable { public int TipId { get; set; } [Required] [
public interface IAuditable
{
DateTime? DateCreated { get; set; }
DateTime? DateModified { get; set; }
}
我有我的模型:
public class Tip : IAuditable
{
public int TipId { get; set; }
[Required]
[StringLength(160)]
public string Title { get; set; }
[Required]
[AllowHtml]
public string Content { get; set; }
[Required]
public bool Posted { get; set; }
public DateTime? DateCreated { get; set; }
public DateTime? DateModified { get; set; }
}
然后在我的DbContext中,我重写了SaveChanges,将正确的值保存到以下字段:
public override int SaveChanges()
{
DateTime auditDate = DateTime.UtcNow;
foreach (DbEntityEntry<IAuditable> entry in ChangeTracker.Entries<IAuditable>())
{
if (entry.State == EntityState.Added)
{
entry.Entity.DateCreated = auditDate;
entry.Entity.DateModified = auditDate;
}
else if (entry.State == EntityState.Modified)
{
entry.Entity.DateModified = auditDate;
}
}
return base.SaveChanges();
}
public override int SaveChanges()
{
DateTime auditDate=DateTime.UtcNow;
foreach(ChangeTracker.Entries()中的DbEntityEntry项)
{
if(entry.State==EntityState.Added)
{
entry.Entity.DateCreated=审核日期;
entry.Entity.DateModified=审核日期;
}
else if(entry.State==EntityState.Modified)
{
entry.Entity.DateModified=审核日期;
}
}
返回base.SaveChanges();
}
项目的创建按预期进行。已设置DateCreated和DateModified。但是,在编辑时,它会设置DateModified,但会将my DateCreated字段置为空。发生什么事了
谢谢,
Brian问题很可能不在
SaveChanges
中,而是在将实体标记为已修改的应用程序代码中。可能创建的DateCreated
在那里是null
,并且属性被标记为modified,因此EF只是将该null
保存到数据库中。web应用程序中的典型示例是,您仅在编辑视图中显示创建的日期。回发后,属性为null
(因为它没有表单字段),然后将实体状态设置为modified
,并且数据库中有null
。(最简单的解决方案是:在视图中为DateCreated
添加一个隐藏的表单字段。)您是否考虑过通过数据库触发器设置日期时间值?当然,没有显示问题的原因。(它会消失。)我认为它无论如何都更安全,因为时间设定得恰到好处。从客户机代码执行此操作总是会导致不可预测的延迟(例如,当ChangeTracker中有很多条目时,或者当SaveChanges打开连接时)。