鉴于以下类,是否有办法首先在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; }
}
可以通过属性来完成吗?
答案 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