2010-01-22 64 views
2

基於this link它看起來像我可以通過簡單地使更改跟蹤獲取日期插入/修改日期的信息「免費」(無需觸發器等)使用SQL Server 2008 。我正在使用實體框架來訪問數據。我的問題是,如何通過Entity Framework和LINQ訪問數據庫記錄的日期修改/日期插入信息?
我使用VS2008,所以我沒有新的EF v4的東西,但(但如果它能夠在新的EF來完成請讓我知道)。
謝謝。訪問SQL Server 2008中的更改跟蹤信息通過實體框架

回答

0

OK,這個精美的作品(見this article)...

public partial class MyEntities 
{ 
    partial void OnContextCreated() 
    { 
     this.SavingChanges += new System.EventHandler(CustomSavingChangesLogic); 
    } 

    /// <summary> 
    /// Apply timestamps 
    /// </summary> 
    public void CustomSavingChangesLogic(object sender, System.EventArgs e) 
    { 
     var changedEntities = ((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified); 
     foreach (var stateEntryEntity in changedEntities) 
     { 
      if(!stateEntryEntity.IsRelationship) { 
       var entity = stateEntryEntity.Entity; 
       var lastModifiedPropInfo = entity.GetType().GetProperty("LastModified"); 
       if (lastModifiedPropInfo != null) 
        lastModifiedPropInfo.SetValue(entity, DateTime.UtcNow, null); 
       if (stateEntryEntity.State == EntityState.Added) 
       { 
        var createdPropInfo = entity.GetType().GetProperty("Created"); 
        if (createdPropInfo != null) 
         createdPropInfo.SetValue(entity, DateTime.UtcNow, null); 
       } 

      } 
     } 
    } 

} 
0

哦,沒關係。我發現很容易,只需在每個表中創建Inserted和LastModified列,爲每個表設置默認值,然後爲LastModified構建更新觸發器。這似乎是人們所做的事情,而變更跟蹤看起來像主要是爲了同步而設置的。對?

+0

哇!但是現在儘管如果我在數據庫中手動插入/編輯,默認和觸發器的工作效果很好,但使用實體框架添加/修改時它們仍然爲空!我甚至試過[綁定(排除=「Id,創建,LastModified」)]但仍然沒有運氣。幫幫我! 我可以「不接受」我的在先答案:-) – Vince 2010-01-22 22:53:54