原文
成都創(chuàng)新互聯(lián)公司長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為港口企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),港口網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。ADO.NET 實(shí)體數(shù)據(jù)模型,其實(shí)我是不太喜歡用這個(gè),主要是遇到復(fù)雜查詢時(shí)linq語(yǔ)句寫(xiě)起來(lái)比較多,當(dāng)然也是可以直接執(zhí)行sql語(yǔ)句的,但是執(zhí)行復(fù)雜sql時(shí)還是執(zhí)行不了,因?yàn)檫B接有問(wèn)題。
但是ADO.NET實(shí)體有個(gè)優(yōu)點(diǎn)就是,能實(shí)時(shí)更新數(shù)據(jù)庫(kù)的變化,并且自動(dòng)更新模型,基于這一點(diǎn)也是我在使用純sql語(yǔ)句的時(shí)候,還是堅(jiān)持使用了不少實(shí)體數(shù)據(jù)模型的。
這幾天打算用實(shí)體模型寫(xiě)一個(gè)多表順序修改的的數(shù)據(jù)庫(kù)操作的功能,也就是上一個(gè)表或記錄修改成功才能進(jìn)行下一個(gè)表或記錄的修改。這里就涉及到回滾的問(wèn)題了。
我原本以為提供的有回滾的機(jī)制,不過(guò)沒(méi)找到,不知道是不是我的資料不全。
我覺(jué)得可以用如下方法解決。
1、如果是同一個(gè)Entities下,最好將每個(gè)表的記錄依次修改,然后最后只運(yùn)行一個(gè)SaveChanges(),來(lái)達(dá)到同時(shí)提交的目的。
例,表名為虛構(gòu),
using (MyEntities aentity = new MyEntities()) { TAB_MEMBER tab1 = aentity.TAB_MEMBER.Where(o => o.ID == "123").FirstOrDefault(); tab1.TBM_ID = "234"; TAB_EMPLOYEE tab2 = aentity.TAB_EMPLOYEE.Where(o => o.ID == "id1").FirstOrDefault(); tab2.TBA_ID = "id2"; aentity.SaveChanges(); }
2、可以將舊的記錄在一個(gè)新的實(shí)例中保存起來(lái)。但是不是引用賦值,而是將舊的記錄的字段和屬性,一次賦值給新的實(shí)例。然后保存修改,如果出錯(cuò)后,將新的實(shí)例的值再賦值給當(dāng)前要修改的記錄,再次保存。
也就是如下關(guān)系:
記錄1副本=記錄1;
bool r= 保存記錄1;
if(r)
{
bool r2 = 保存記錄2;
if(!r2)
{
將記錄一的副本重新保存,覆蓋掉記錄1的修改。
}
}
目前來(lái)說(shuō),我會(huì)使用這兩種方式解決回滾問(wèn)題。歡迎大家交流。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。