我有一個問題,我認爲很容易解決。 這是我的場景(實體框架4斷開實體使用自我跟蹤)。 比方說,我有2個實體:用戶,訂單。 從一個asp.net頁面獲取數據庫1個用戶和1個訂單。更新與實體框架自我跟蹤實體
const int userId = 1;
const int orderId = 1;
var userManager = new UserManager();
var orderManager = new OrderManager();
var user = userManager.GetUser(userId);
var order = channelManager.GetChannel(channelId);
user.Orders.Add(order);
現在我需要創建一個函數來更新用戶添加順序。
我寫的是這樣的:
public bool UpdateUser(User user)
{
context.AttachTo("Users", user);
var stateMgr = context.ObjectStateManager;
var stateEntry = stateMgr.GetObjectStateEntry(user);
for (int i = 0; i < stateEntry.CurrentValues.FieldCount; i++)
{
bool isKey = false;
string name = stateEntry.CurrentValues.GetName(i);
foreach (var keyPair in stateEntry.EntityKey.EntityKeyValues)
{
if (string.Compare(name, keyPair.Key, true) == 0)
{
isKey = true;
break;
}
}
if (!isKey)
{
stateEntry.SetModifiedProperty(name);
}
}
context.ApplyCurrentValues("Users", user);
return context.SaveChanges() > 0;
}
我沒有這個功能的任何錯誤和調試一切似乎是確定,但是當我檢查數據庫沒有更新實體如預期。 我認爲更新一個斷開的實體是一件簡單的事情,但顯然不是。 有人可以解釋我更新與EF4斷開對象的整個圖形之間的邏輯嗎?請如果您能我需要undestand邏輯並且沒有收集的鏈接看。我已經花了一些時間在互聯網上看,但我發現這麼多的批評,我不知道哪一個是正確的。
謝謝