2013-07-17 64 views
3

給定以下類,是否有一種方法可以首先在EF代碼中自動計算實體的創建和修改屬性?EF代碼第一次計算修改和創建屬性

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

可以通過屬性來完成嗎?

回答

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 
+0

謝謝 - 我已經在基礎知識庫中實現了這個功能。我希望有一種方法可以使用屬性來實現,但是這種方法也可以。 – Darbio

1

根據在http://msdn.microsoft.com/en-us/library/gg193958.aspx的文檔:

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

可以使用時,代碼首先生成 在數據庫上字節或時間戳列生成的數據庫,否則你應該只使用這個指向時 現有數據庫因爲代碼首先將無法確定計算列的 公式。

我從來沒有嘗試過,但它看起來像會工作,我很高興也學會了這一點。

+0

其實這可能僅僅是1/2的答案BEC我不知道外匯基金會如何知道創建只獲得第一次設置和修改每次都得到更新... –

+0

謝謝,但我認爲這隻適用於'字節[]'時間shich標記'TimestampAttribute' 。在我的理解中'TimeStamp'和'DateTime'是兩個不同的東西。 – Darbio

+0

嗯,但我粘貼的例子也是來自文檔,這是一個DateTime ... oh wel –