[英]Committing changes to the database using Entity Framework
我有一種情況,我按日期從表中提取數據。 如果沒有為給定日期提供數據,我使用默認值創建記錄並將其全部顯示給用戶。 當用戶完成操作數據時,我需要提交更改。
所以我的問題是如何在實體框架中處理提交表格,其中可能存在需要完成的更新和添加。 這是在使用MVC3和實體框架的C#中。
所以這是數據可能開始的樣子,
表A.
NAME AGE PHONE_NUM
Jim 25 555-555-5555
Jill 48 555-551-5555
用戶完成數據后,它可能看起來像這樣,
表A.
NAME AGE PHONE_NUM
Jim 25 555-555-5555
Jill 28 555-551-5555
Rob 42 555-534-6677
我如何提交這些更改? 我的問題是需要更新和插入嗎?
我發現了一些這樣的代碼,但我不知道它是否適用於這種情況。
用於添加數據行
entities.TABlEA.AddObject(TableOBJECT);
entities.SaveChanges();
或者用於更新數據
entities.TABLEA.Attach(entities.TABLEA.Single(t => t.NAME == TableOBJECT.NAME));
entities.TABLEA.ApplyCurrentValues(TableOBJECT);
entities.SaveChanges();
是否有任何這項工作或我是否需要跟蹤那里有什么以及添加了什么?
想法?
或多或少你已經有了解決方案。 您只需要檢查嘗試從數據庫加載對象的Single
調用是否有結果(改為使用SingleOrDefault
)。 如果結果為null
,則需要插入,否則更新:
foreach (var TableOBJECT in collectionOfYourTableOBJECTsTheUserWorkedWith)
{
var objectInDB = entities.TABLEA
.SingleOrDefault(t => t.NAME == TableOBJECT.NAME);
if (objectInDB != null) // UPDATE
entities.TABLEA.ApplyCurrentValues(TableOBJECT);
else // INSERT
entities.TABLEA.AddObject(TableOBJECT);
}
entities.SaveChanges();
(我假設NAME
是您的TableOBJECT
實體的主要鍵屬性。)
我認為你必須跟蹤新內容和修改內容。 如果您這樣做,那么您提供的兩個代碼示例將起作用。 我使用的一個簡單的解決方法是檢查實體的主鍵屬性是否設置為任何東西。 如果它被設置為一個值,那么這是一個更新的對象,否則它是新的。
另一種解決方案是使用Entity Framework的自我跟蹤實體,但我認為這不是進入Web應用程序的正確方向(可能是在分布式WCF應用程序中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.