原文
ADO.NET 實體數據模型,其實我是不太喜歡用這個,主要是遇到復雜查詢時linq語句寫起來比較多,當然也是可以直接執行sql語句的,但是執行復雜sql時還是執行不了,因為連接有問題。
但是ADO.NET實體有個優點就是,能實時更新數據庫的變化,并且自動更新模型,基于這一點也是我在使用純sql語句的時候,還是堅持使用了不少實體數據模型的。
這幾天打算用實體模型寫一個多表順序修改的的數據庫操作的功能,也就是上一個表或記錄修改成功才能進行下一個表或記錄的修改。這里就涉及到回滾的問題了。
我原本以為提供的有回滾的機制,不過沒找到,不知道是不是我的資料不全。
我覺得可以用如下方法解決。
1、如果是同一個Entities下,最好將每個表的記錄依次修改,然后最后只運行一個SaveChanges(),來達到同時提交的目的。
例,表名為虛構,
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、可以將舊的記錄在一個新的實例中保存起來。但是不是引用賦值,而是將舊的記錄的字段和屬性,一次賦值給新的實例。然后保存修改,如果出錯后,將新的實例的值再賦值給當前要修改的記錄,再次保存。
也就是如下關系:
記錄1副本=記錄1;
bool r= 保存記錄1;
if(r)
{
bool r2 = 保存記錄2;
if(!r2)
{
將記錄一的副本重新保存,覆蓋掉記錄1的修改。
}
}
目前來說,我會使用這兩種方式解決回滾問題。歡迎大家交流。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前名稱:C#提高知識ADO.NET實體數據模型(3)-關于回滾-創新互聯
標題來源:http://vcdvsql.cn/article20/ceojco.html
成都網站建設公司_創新互聯,為您提供網站策劃、網站排名、搜索引擎優化、外貿網站建設、響應式網站、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯