C# ASP MVC代码首先处理datetime计算列

C# ASP MVC代码首先处理datetime计算列,c#,asp.net,asp.net-mvc,code-first,unit-of-work,C#,Asp.net,Asp.net Mvc,Code First,Unit Of Work,我已经阅读了许多示例,试图找出如何在通过unitOfWork和存储库模式保存更改时自动设置每个实体的CreatedDate值 因此,我所拥有的是简单的POCO: public class Partners:IAutoGenerateDateFields { [Key] public int PartnerId { get; set; } public string PartnerCode { get; set; }

我已经阅读了许多示例,试图找出如何在通过
unitOfWork
存储库模式保存更改时自动设置每个实体的
CreatedDate

因此,我所拥有的是简单的
POCO

    public class Partners:IAutoGenerateDateFields
    {

        [Key]
        public int PartnerId { get; set; }
        public string PartnerCode { get; set; }
        public string PartnerName { get; set; }
        public string CompanyName { get; set; }
        public string City { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        public string Fax { get; set; }
        public string TaxId { get; set; }
        public int PartnerTypeId { get; set; }
        public int PartnerStateId { get; set; }
        public int LocationId { get; set; }

        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
        public DateTime CreatedDate { get; set; }

      //  [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
      //  public DateTime ModifiedDate { get;set;}
        public virtual Locations Location { get; set; }

    }
此类实现了
IAutoGenerateDateFields
接口:

    interface IAutoGenerateDateFields
    {
        DateTime CreatedDate { get; set; }
      //  DateTime ModifiedDate { get; set; }
    }
最后,在我的
unitOfWork
类中,我检查添加/修改的实体是否实现了上述接口,并将
CreatedDate
值设置为当前日期:

    public void Save() {
        context.ChangeTracker.DetectChanges();

        var added = context.ChangeTracker.Entries()
                            .Where(t => t.State == EntityState.Added)
                            .Select(t => t.Entity).ToArray();
        foreach (var entity in added) {
            if (entity is IAutoGenerateDateFields) {
                var track = entity as IAutoGenerateDateFields;
                track.CreatedDate = DateTime.Now;
            }

        }

        var modified = context.ChangeTracker.Entries()
                                .Where(t => t.State == EntityState.Modified)
                                .Select(t => t.Entity).ToArray();
        foreach (var entity in modified) {
            if (entity is IAutoGenerateDateFields) {
                var track = entity as IAutoGenerateDateFields;
                track.CreatedDate = DateTime.Now;
            }
        }

        context.SaveChanges();
    }
但是每次我点击
savechanges
时,我都会得到一个错误,
CreatedDate
不能为空。因此,实体不会设置为当前日期


这里缺少什么?

删除
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
属性,因为您在代码中生成了值

我昨天基本上做了同样的事情,下面的代码运行良好:

        var pendingChanges = GetContext().ChangeTracker.Entries<T>().Select(e => e.Entity).ToList();

        foreach (var entity in pendingChanges)
        {
            entity.DateModified = DateTime.Now
        }
var pendingChanges=GetContext().ChangeTracker.Entries().Select(e=>e.Entity.ToList();
foreach(待处理变更中的var实体)
{
entity.DateModified=DateTime.Now
}

删除
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
属性,因为您在代码中生成了值

我昨天基本上做了同样的事情,下面的代码运行良好:

        var pendingChanges = GetContext().ChangeTracker.Entries<T>().Select(e => e.Entity).ToList();

        foreach (var entity in pendingChanges)
        {
            entity.DateModified = DateTime.Now
        }
var pendingChanges=GetContext().ChangeTracker.Entries().Select(e=>e.Entity.ToList();
foreach(待处理变更中的var实体)
{
entity.DateModified=DateTime.Now
}