2013-10-26 132 views
0

「屬性‘CREATEDATE’上型‘商品’不是原始或 複雜性質。該性質方法只能與原始 或複雜的性質。使用參考或收集方法「。實體框架覆蓋的SaveChanges錯誤

這是我使用的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(); 

    } 
+0

真是對不起這個職位,是我不好我不知道該字段CREATEDATE必須對所有表。該方法增加了日期時間,而是1900-01-01 00:00:00.000,而不是當前的日期 – Jose

+0

所以可以刪除嗎? –

回答

2

您不必對每個表中的字段。您可能不希望對該事件中的所有表執行審計跟蹤,您可以使用審計信息從基礎繼承,並相應地保存更改。在這種情況下繼承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(); 
}