LINQ to SQL: DataContext.SubmitChanges() 失效问题
當(dāng) DataContext (及其繼承類(lèi)) 的 ObjectTrackingEnabled? = True(默認(rèn)值)時(shí):
1.如果用 DataContext 取出了某類(lèi)(Tables)的實(shí)例對(duì)象,例如調(diào)用了First, FirstOrDefault, All, Last, LastOrDefault,...
2.那么,只要你對(duì)該對(duì)象的任何屬性(Property) 進(jìn)行了賦值操作,DataContext 就自動(dòng)跟蹤到這個(gè)動(dòng)作。
3.此后,一旦調(diào)用 SubmitChanges() 就將這些改變保存到數(shù)據(jù)庫(kù)中去。
?
但是很不幸的是,DataContext 對(duì)對(duì)象的賦值操作和復(fù)制操作卻視而不見(jiàn)。
?
例如:
1.以下代碼,將程序執(zhí)行更新操作時(shí)(在代碼中有Mark標(biāo)記的分支),其后的dc.SubmitChanges()不會(huì)工作。
SimboxDataContext dc = new SimboxDataContext();
aspnet_User u = dc.aspnet_Users.First(c=>c.UserName==User.Identity.Name);
Messenger newMessenger = new Messenger();
newMessenger.UserID = u.UserId;
newMessenger.CurrentFlag = chkCurrentFlag.Checked;
int nTransmitLimit = 0;
int.TryParse(txtTransmitLimit.Text, out nTransmitLimit);
newMessenger.TransmitLimit = nTransmitLimit;
newMessenger.ModifiedDate = DateTime.Now;
Messenger originalMessenger = dc.Messengers.FirstOrDefault(c => c.UserID == u.UserId);
if (originalMessenger == null)
{
??? dc.Messengers.InsertOnSubmit(newMessenger);
}
else
{
??? originalMessenger = newMessenger; // Mark
}
dc.SubmitChanges();
?
2.必須將:
originalMessenger = newMessenger; // Mark
替換為:
//originalMessenger = newMessenger;
//originalMessenger.UserID = u.UserId;
originalMessenger.CurrentFlag = newMessenger.CurrentFlag;
originalMessenger.TransmitLimit = newMessenger.TransmitLimit;
originalMessenger.ModifiedDate = newMessenger.ModifiedDate;
?
我認(rèn)為這個(gè)問(wèn)題的影響不可小覷,因?yàn)?#xff0c;當(dāng)我們將數(shù)據(jù)處理移去DAL(Data Access Lay),將這種業(yè)務(wù)邏輯移去BLL (Business Logic Layer) 后,傳來(lái)傳去的數(shù)據(jù)都是這種封裝后的對(duì)象。
偶正在探尋能夠解決或回避這個(gè)問(wèn)題的方案,如有資料請(qǐng)Comment給我,謝謝先^_^
轉(zhuǎn)載于:https://www.cnblogs.com/SoulStore/archive/2008/11/27/1342320.html
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的LINQ to SQL: DataContext.SubmitChanges() 失效问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【转】Step By Step在VS20
- 下一篇: SQL Server Managemen