首页 新闻 会员 周边

EntityFramework4.2 中使用事务的一个问题-如何才能不使用MSDTC ?

0
悬赏园豆:50 [已关闭问题] 关闭于 2012-01-29 12:35

使用code first 。在使用事务时,如下面代码,会自动调用MSDTC 。

using (MyEntities context = new MyEntites())
{
using (TransactionScope trans = new TransactionScope())
{

List<Ent1> list1=(from o in context.Ent1 select o).ToList(); //这里有一些查询,有2条以上查询,scope就自动调用msdtc

List<Ent2> list2=(from o in context.Ent2 select o).ToList();

。。。。

}。。。。

}

 

 

因为部署的关系,不想用MSDTC,我在MSDN上看到有个说明,说显式打开连接可以避免使用

MSDTC,代码如下:

using (MyEntities context = new MyEntites())
{
using (TransactionScope trans = new TransactionScope())
{
context.Connection.Open();
...Do Stuff...
trans.Complete();
}
}

 

网址是这个:http://msdn.microsoft.com/en-us/library/bb738523.aspx

但是这个可能是 4.0时候的写法,我照这种方式处理,结果会出现异常,在构造查询时候不能使用打开的连接。在stackoverflow搜索了很多帖子也没找到解决办法。

 

请教大牛,该如何使用带查询的事务且不用MSDTC?

Simple is best的主页 Simple is best | 初学一级 | 园豆:20
提问于:2012-01-13 18:03
< >
分享
所有回答(3)
0

推荐参考文章:C#综合揭秘——细说事务

dudu | 园豆:31048 (高人七级) | 2012-01-13 22:58

dudu,我仔细看了这篇BLOG,并没有解决我的问题,我的问题与他文章中entityframework使用事务部分可能有两个差异:

1 我用entityframework code first .

2 在事务中多次使用了查询,才引起事务升级为MSDTC 。但是我不想使用MSDTC,担心客户的环境中没有安装这东东。

支持(0) 反对(0) Simple is best | 园豆:20 (初学一级) | 2012-01-15 21:19

@Simple is best: 参考一下这篇文章.NET: how to disable promotion in System.Transactions?

支持(0) 反对(0) dudu | 园豆:31048 (高人七级) | 2012-01-15 22:06

@dudu: 这篇我也看过,并没有解决我的问题。

我的问题归纳起来很简单,用code first,只要执行2次或以上的query或savechanges,就调用MSDTC,否则就报错:基础提供程序在 Open 上失败

最终我在stackoverflow 上看到另一个帖子,说要code first要sql2008以上才支持数据库内部事务。

支持(0) 反对(0) Simple is best | 园豆:20 (初学一级) | 2012-01-29 12:34
0

回答问题收藏。。。。

IT_shandian | 园豆:204 (菜鸟二级) | 2012-09-21 17:20
0

一个savechanges不会提升为msdtc,多个savechanges会自动提升为msdtc

张占岭 | 园豆:464 (菜鸟二级) | 2013-10-29 10:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册