EF Code First计算Modified和Created属性

本文关键字:Created 属性 Modified 计算 Code First EF | 更新日期: 2023-09-27 18:23:42

给定以下类,是否有方法首先在EF代码中自动计算实体的Created和Modified属性?

public class BaseEntity
{
    [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
    public DateTime Created { get; set; }
    public DateTime Modified { get; set; }
}

属性可以完成吗?

EF Code First计算Modified和Created属性

我在EF中为此使用了一个存储库模式。

POCO可能实现

public interface IFQuickAudit {
    Nullable<DateTimeOffset> CreatedOn { get; set; }
    Nullable<long> CreatedBy { get; set; }
    Nullable<DateTimeOffset> ChangedOn { get; set; }
    Nullable<long> ChangedBy { get; set; }
}

如果它执行了,则在Add或CHange方法期间,基本存储会检查此项并设置值

public class RepositoryBase<TPoco>
//...
public virtual OperationResult Add(TPoco poco)
var entityQA = poco as IFQuickAudit;
        if (entityQA != null) {
             entityQA .CreatedBy = userId;
             entityQA .CreatedOn = when;
        }
// checks...
Context.Set<TPoco>().Add(poco);
// similar for Chnage routine

根据http://msdn.microsoft.com/en-us/library/gg193958.aspx:

 [DatabaseGenerated(DatabaseGenerationOption.Computed)]
      public DateTime DateCreated { get; set; } 

当代码第一次生成时,您可以使用在字节或时间戳列上生成的数据库数据库,否则只应在指向现有数据库,因为代码先行将无法确定计算列的公式。

我从来没有尝试过,但看起来它会起作用,我很高兴也学到了这一点。