0

「タイプ 'Commodity' のプロパティ 'CreateDate' は、プリミティブ プロパティまたは複雑なプロパティではありません。Property メソッドは、プリミティブ プロパティまたは複雑なプロパティでのみ使用できます。Reference メソッドまたは Collection メソッドを使用してください。」

これは私が使用している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();

    }
4

1 に答える 1

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();
}
于 2016-10-28T21:27:59.610 に答える