Sql server DateCreated在编辑时为空

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] [

我正在尝试我的手在ef代码第一和运行的问题

我有一个界面IAuditable:

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打开连接时)。