3

给定以下类,有没有办法首先在 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; }
}

可以通过属性完成吗?

4

2 回答 2

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
于 2013-07-17T14:02:54.373 回答
1

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

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

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

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

于 2013-07-17T01:55:25.993 回答