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