简体   繁体   English

实体框架覆盖SaveChanges错误

[英]Entity Framework override SaveChanges Error

"The property 'CreateDate' on type 'Commodity' is not a primitive or complex property. The Property method can only be used with primitive or complex properties. Use the Reference or Collection method." “'Commodity'类型的属性'CreateDate'不是原始属性或复杂属性.Property方法只能用于原始或复杂属性。使用Reference或Collection方法。”

This is the POCO class I am using and this code snippets for the context 这是我正在使用的POCO类,此代码片段用于上下文

    public class OrdNumber
{
    public int OrdNumberId { get; set; }
    public string orderNum { get; set; }
   // [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime CreateDate { get; set; }
}


        public override int SaveChanges()
    {
        DateTime saveTime = DateTime.Now;
        foreach (var entry in this.ChangeTracker.Entries().Where(e => e.State == System.Data.EntityState.Added))
        {
            if (entry.Property("CreateDate").CurrentValue == null)
                entry.Property("CreateDate").CurrentValue = saveTime;
        }
        return base.SaveChanges();

    }

You do not have to have the field on every table. 您不必在每张桌子上都有该字段。 You may not want audit tracking on all tables in that event you can inherit from a base with the audit info and override save changes accordingly. 您可能不希望在该事件中对所有表进行审计跟踪,您可以从具有审计信息的基础继承并相应地覆盖保存更改。 In this case inherit from AuditInfo 在这种情况下继承自AuditInfo

public class AuditInfo
{
    [Required]
    public DateTime CreatedDateTimeUtc { get; set; }
    [Required]
    public DateTime ModifiedDateTimeUtc { get; set; }
}


public override int SaveChanges()
{
    var addedEntityList = ChangeTracker.Entries().Where(x => x.Entity is AuditInfo && x.State == EntityState.Added).ToList();
    var updatedEntityList = ChangeTracker.Entries().Where(x => x.Entity is AuditInfo && x.State == EntityState.Modified).ToList();

    if (addedEntityList.Any() || updatedEntityList.Any())
    {
        var context = HttpContext.Current;
        if (context == null)
        {
            throw new ArgumentException("Context not available");
        }

        foreach (var addedEntity in addedEntityList)
        {
            ((AuditInfo)addedEntity.Entity).CreatedDateTimeUtc = DateTime.UtcNow;
            ((AuditInfo)addedEntity.Entity).ModifiedDateTimeUtc = DateTime.UtcNow;
        }

        foreach (var updatedEntity in updatedEntityList)
        {
            ((AuditInfo)updatedEntity.Entity).ModifiedDateTimeUtc = DateTime.UtcNow;
        }
    }

    return base.SaveChanges();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM