EF Code First计算修改和创建属性

3

在EF Code First中,给定以下类,是否有一种方法可以自动计算实体的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个回答

1
根据http://msdn.microsoft.com/en-us/library/gg193958.aspx上的文档,
 [DatabaseGenerated(DatabaseGenerationOption.Computed)]
      public DateTime DateCreated { get; set; } 

当使用Code First生成数据库时,可以使用基于byte或timestamp列生成的数据库,否则只有在指向现有数据库时才应该使用此功能,因为Code First将无法确定计算列的公式。

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


实际上这可能只是一半的答案,因为我不知道EF如何知道Created仅在第一次设置,而Modified每次都会更新... - Aaron Anodide
谢谢,但我认为这仅适用于被标记为TimestampAttributebyte[]类型。在我看来,TimeStampDateTime是两个不同的东西。 - Darbio
嗯,但我粘贴的示例也来自文档,那是一个DateTime... 哦,算了。 - Aaron Anodide
是的,那份文档是针对在数据库中定义了一个规则来更新该字段的情况。不过还是谢谢你。 - Darbio

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; }
}

如果它执行基本存储库检查,则在添加或更改方法期间进行此操作并设置值。
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

谢谢 - 我已经在基本仓库中实现了这个。我希望能够通过属性的方式实现它,但这种方法同样有效。 - Darbio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接