2009-10-24 58 views
4

我一直在想,如果在實體框架中有任何方式來保存對數據庫的一些修改而其他的沒有。想象一下我可以說4個實體類 - 客戶,任務,SalesSchema和地址。這些都是客戶一對多的關係。現在我創建一個帶有3個選項卡(使用TabControl)的窗口,每個窗口都有一個DataGridView,它列出了地址,任務和銷售模式,還爲每個按鈕(添加,修改,刪除)處理每個實體類型的詳細信息。實體框架 - 部分提交

我想要做的是允許部分更改提交數據庫例如。用戶添加任務 - >應該在用戶點擊保存更改時立即保存,但只保存活動選項卡中的更改。 (不要問我爲什麼必須這樣做 - 這是客戶需要它的方式)

現在通過創建單獨的數據上下文並分別提交這些數據上下文來實現,但是我想知道是否有另一種方法來實現做到這一點 - 使用一個對象上下文。

在ADO.NET數據集中,有一種單獨提交更改的方法 - 獲取更改,執行一些必要的工作人員,甚至拒絕更改。

這是可能與ADO.NET實體框架?

回答

1

我不確定我是否正確/完全理解您的問題,但大多數需求應該輕鬆地使用一個上下文來處理。下面是一個將某個類型的所有對象恢復爲原始狀態的簡單示例,如果之後要在上下文中調用SaveChanges() - 只有剩餘的處於已添加或已更改狀態的對象纔會提交 - 部分提交。

foreach (System.Data.Objects.ObjectStateEntry x in MyEntity.ObjectStateManager.GetObjectStateEntries(EntityState.Added)) // or modified for that matter. 
{ 
    if (x.EntityKey != null) 
    { 
     if (x.Entity is MyClass) // look haven't tested this code, merely example and may have typo's 
     { 
     MyClass tmpObject = (MyClass)x.Entity; 
     MyEntity.Refresh(RefreshMode.StoreWins, x); 
     } 
    } 
} 

我試圖傳達出點有很多提供給你,如果你跟蹤你想「部分」提交的項目控制。你想要恢復到原始狀態或丟棄的那些可以恢復,甚至完全從上下文中移除。

不知道這是否有幫助。祝你好運。

+0

謝謝。這是迄今爲止最好的答案,所以我要標記它是正確的。總結整件事:沒有建立機制去做某事。就像在數據集中一樣。我意識到解決方法,但我真正想知道的是如果我沒有錯過任何東西。 – kubal5003

1

我的理解是,實體框架中的提交已本地化爲實體項目所附的數據上下文。如果您想在處理其他數據時進行部分提交,則可以創建新的數據上下文,加載所需的不相關對象,進行修改並在新的數據上下文中提交。您的原始數據上下文和對象應該保持不變,並且不合並。

+0

這真的是我做的。 – kubal5003