2012-11-28 45 views
1

作爲我的DbContext中保存操作的一部分,我需要序列化擴展信息以存儲在數據庫的二進制字段中。作爲實體框架的一部分的其他操作保存

我已經編寫了以下方法來攔截已添加或修改的所有Client對象,以確保序列化在保存之前發生。我想知道是否有更好的方法來做到這一點,或者如果這種方法會產生問題。

public int Save() 
{ 
    foreach (Client client in this.Context.Local.Clients) 
    { 
     EntityState state = this.Context.Entry(client).State; 
     if (state == EntityState.Added || state == EntityState.Modified) 
     { 
      client.SerializeExtended(); 
     } 
    } 
    return this.Context.SaveChanges(); 
} 
+0

重寫DbContext.SaveChanges方法,並將序列化邏輯放在那裏。也請在您的自定義代碼之前調用ChangeTracker.DetectChanges方法。 – cubski

+0

我同意重寫SaveChanges將是一個優雅的方式來做到這一點。就我而言,我使用的是不公開底層上下文的存儲庫,因此使用Save方法可以在不知道數據提供者的情況下觸發保存。 – Ketrex

回答

2

覆蓋DbContext.SaveChanges方法。

protected override int SaveChanges() 
{ 
    foreach (var entry in ChangeTracker.Entries<Clients()) 
    { 
     var entity = entry.Entity; 
     if (entry.State == EntityState.Added || entry.State == EntityState.Modified) 
     { 
      entry.Entity.SerializeExtended(); 
     } 
    } 
    base.SaveChanges(); 
} 
+0

我會加1這個,因爲這是一個很好的建議。請參閱上面的評論,以瞭解爲什麼我在存儲庫中使用自定義Save方法的原因。也許我應該已經更清楚了,我想知道是否循環瀏覽本地客戶端對象列表並尋找添加和更新是在這種情況下最好(或唯一)的方式。感謝您的回答! – Ketrex

+0

看到我更新的回覆。 –

+0

擊中標記,+1給您的先生 – cubski