问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用EF操作数据库 对多张表操作是否需要事务

发布网友 发布时间:2022-04-07 17:34

我来回答

3个回答

懂视网 时间:2022-04-07 21:55

Seal_Services { public class seal_testServer : BaseServer<seal_test>, Iseal_usersServer { public void TTTT() { try { seal_test test = new seal_test() { name = "1111", age = 1 }; base.AddEntity(test); base.db.SaveChanges(); BaseUCMSServer<au_Role> ucmsserver = new BaseUCMSServer<au_Role>(); au_Role role = new au_Role(); role = ucmsserver.FindEntitie(c => c.id == 7); role.id=10;//作异常 role.role_name = "BBBBBBBBBBB"; ucmsserver.UpdateEntity(role); ucmsserver.db.SaveChangesForUCMS(); } catch (System.Exception ex) { throw ex; } } } }

3)这段代码是有问题的,当要同时操作不同数据库,且有数据有效性的时候,就会发现前面的一个成功了,后面的一个失败了。怎么办呢?EF的事务机制显然已经满足不了程序的要求了,怎么办呢?加TransactionScope吧。

4)于是乎就有了这样一段代码:

namespace Seal_Services
{
 public class seal_testServer : BaseServer<seal_test>, Iseal_usersServer
 {
 public void TTTT()
 {
  using (TransactionScope scope = new TransactionScope())
  {
  try
  {
   seal_test test = new seal_test()
   {
   name = "1111",
   age = 1
   };
   base.AddEntity(test);
   base.db.SaveChanges();
   BaseUCMSServer<au_Role> ucmsserver = new BaseUCMSServer<au_Role>();
   au_Role role = new au_Role();
   role = ucmsserver.FindEntitie(c => c.id == 7);
   role.role_name = "BBBBBBBBBBB";
   ucmsserver.UpdateEntity(role);
   ucmsserver.db.SaveChangesForUCMS();

   scope.Complete();
  }
  catch (System.Exception ex)
  {
   throw ex;
  }
  }
 }
 }
}

5)可还是有问题呀,在处理第二个Server时会抛出异常“ 基础提供程序在 Open 上失败 ”。然而可以肯定的是,数据库链接字符串是正确的。可却报错了,这是为什么呢?【这是我电脑环境上的一个坑】

6)经过分析(翻了无数百度相同的转贴后...),想到了,会不会有SQL配置相关?导致了TransactionScope的使用失败?

7)打开 Sql Server Configuration Manager时,我看到SQL Server服务,显示的是:远程过程调用失败。这个???既然失败,那就让它正确。于是:打开 控制面板-卸载 找到 Express LocalDB。坚定的将其【卸载】。返回程序中,再执行。结果是......成功啦!!!

 

后记:

  1)在EF中使用跨数据库操作,可以考虑使用这里提供的[ 建立多个ADO.NET实体数据模型 ]的思路。在做TransactionScope事务时,一定要注意[ Express LocalDB ]。

  2)在解决EF跨数据库操作的过程中,还考虑了[ SQL同义词 ]的。但事实证明,这是完全行不通的做法,无论是在EF5.0,还是EF6.0中。

问题环境:Win8.1, Sql Server 2008 R2, Visual Studio 2013 Professional 2013 Update3

 

EF5.0中的跨数据库操作

标签:

热心网友 时间:2022-04-07 19:03

  对多张表进行操作是需要事务的。

  事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

热心网友 时间:2022-04-07 20:21

1.同一个DB上下文本身就是事务的.

2.本身没有区别. 请根据业务需求决定.SaveChanges()时才会进行约束检查,发生异常会导致回滚.追问如果同一个DB上下文本身有事务,那我每操作一完张表就SaveChanges()一次,如果在最后一张表,出异常,还能回滚吗

追答回滚到前一个SaveChanges,多个表是同一个事物,请在最后SaveChanges.

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
14岁每天做多少蹲起和提踵不影响长高 每天晚上提踵来练弹跳会影响长高吗? 提踵和练肌肉会不会长不高? 提踵(抬脚跟)训练会影响长个吗 求高人指点 提踵 会不会影响身高的增长? 我现在15岁 提踵有利于长高吗 提踵影响长高吗 win10可不可以玩盗版的中2,帝战,拿战 沧州蓝海光伏设备有限公司怎么样? 为什麽女巫要骑扫帚不骑板凳。。。 预售55万起 红旗这台全尺寸SUV比H9更豪横 苹果4s 型号是:MD237C/A 序列号是:C39H1AFBDTD1.求查激活时间. 非接触式温度检测仪的设计 毕业设计 车架号是LBE2DAFB2JZ050243是什么车 W12变成大V8,宾利飞驰依旧豪横,单内饰配色就有60多种 打电话给客户推销保险的范文,300字到五百字 二娃家庭新选择雪佛兰开拓者,大七座豪横 大学物理实验(温度传感器的设计和试验)思考 公主豪横_by长缨止戈_txt全文免费阅读 长城炮有多豪横都有哪几种全地形越野模式? 温度传感器而做的电子温度计毕业论文 浙教版七年级上册数学《同步练习(一元一次方程的解法4)》答案 豪横的老头竟用自己的血养了一只怪物,是什么电影? 数字温度传感器的原理设计及应用 浙教版七年级上数学作业本复习题题目 这事干的特豪横 一般人干不出来是什么意思 关于温度传感器的设计,求助 雁飞残月天的作者是谁 浙教版七年级上数学试卷5.1~5.2(一元一次方程)的答案 基于51单片机及DS18B20温度传感器的数字温度计设计 江西抚州崇仁县派出所补办身份证大约要多久?谢谢!! 关于温度传感器的材料和制作。 求NDS牧场物语风之集市的金手指代码及使用方法 NDS 牧场物语 风之集市 的金手指。 江西抚州身份证快到期了 提前多久办为好 各位大侠,今天新入手了港行4S,请帮忙查下序列号,怕被骗啊!序列号为:C8PK2AFBDTC0 谢谢啦! 江西 抚州 办理身份证需要多长时间 求高手帮我查询一下苹果4,型号:C37F5C21DDP7,IMEI:A100001AFBE46D,能买?刚没插卡输*#06#查不到,求解 我一打开仙剑五游戏就出现Launch.exe-应用程序错误 未知的软件异常, 位置为Ox7c812afb 怎么办哪?急急急 为什么江西抚州金溪办身份证要2个月才能办下来拿到手呢 江西省抚州市临川区唱凯镇补办身份证要多久? 江西抚州大岗镇办张临时身份证要多久 公务员考试都要有体能测试吗?考什么内容啊? 在QQ群里的公享文件怎么下载到自己的电脑里 高考 湖北 语文 作文 诚信主题班会课件 荣耀9多少钱?价格多少? 如何下载群共享的文件到自己的电脑上 如何将别人电脑中的文件复制到自己的电脑上啊? 荣耀9价格是多少?