EF Code First计算Modified和Created属性

时间:2013-07-17 01:07:42

标签: c# entity-framework ef-code-first poco

鉴于以下类,是否有办法首先在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; }
}

可以通过属性来完成吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

我在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