如果我有以下實體:實體框架/ SQL2008 - 如何自動更新實體的LastModified字段?
public class PocoWithDates
{
public string PocoName { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime LastModified { get; set; }
}
對應於SQL Server 2008中的表具有相同的名稱/屬性...
我怎麼可以自動:
- 將記錄的CreatedOn/LastModified字段設置爲現在(在執行INSERT時)
- 設置上次更改時間字段中記錄現在(做UPDATE時)
,當我說自動,我的意思是我希望能夠做到這一點:
poco.Name = "Changing the name";
repository.Save();
不是這:
poco.Name = "Changing the name";
poco.LastModified = DateTime.Now;
repository.Save();
在幕後,「某事」應該會自動更新日期時間字段。那是什麼「東西」?
我正在使用實體框架4.0 - 有沒有一種方法,EF可以爲我自動做到這一點? (在EDMX也許一個特殊的設置?)
從SQL Server端,我可以使用默認值,但將只對工作INSERT的(未更新的)。
同樣,我可以使用POCO的構造函數來設置默認值,但這隻會在實例化對象時才起作用。
當然我可能使用觸發器,但它並不理想。因爲我使用實體框架,我可以掛鉤到SavingChanges事件和更新這裏的日期字段,但問題是我需要變得「知道」POCO的(目前,我的存儲庫是用泛型實現)。我需要做一些面向對象的詭計(比如讓我的POCO實現一個接口,並且調用一個方法)。我沒有被逆轉,但如果我必須這樣做,我寧願手動設置字段。
我基本上是在尋找一個SQL Server 2008或Entity Framework 4.0解決方案。 (或一個聰明的.NET方式)
任何想法?
編輯
感謝@marc_s他的回答,但我去了一個解決方案這是我的方案更好。
我剛纔問一次這個問題,但後來EF6,因爲我很喜歡這個問題,所提供的解決方案,但所提供的代碼示例不適用於EF6.0,因爲它們是目前的。 – Bart 2014-02-20 15:23:33