关于Entity Framework和TransactionScope的问题

Adol1111 2014-03-26 05:26:01
目前项目由于某些原因不能使用Entity直接插入,改成了ExecuteSqlCommand方式插入
在使用事务的时候发生了问题。


void a(){
using (var trans = new TransactionScope())
{
b(model1);
c(model2);
trans.Complete();
}
}

void b(XX model){
using(var db = new myContext()){
……
db.Database.ExecuteSqlCommand(sql,args);
d(sql);
}
}

void c(XX model){
using(var db = new myContext()){
db.Database.ExecuteSqlCommand(sql,args);
d(sql);
}
}

//记录相关sql,这张表不需要用ExecuteSqlCommand执行
void d(string sql){
using(var db = new myContext()){
db.XXX.Add(new xxx{
sql = sql
});
db.SaveChanges();
}
}

现在的情况是这样的,当我b、c有一个执行失败时,d里面用Add插入的内容的确回滚了,但是b、c却是即时插入,不在事务中,没有办法回滚。
...全文
595 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
webdiyer 2014-03-27
  • 打赏
  • 举报
回复
看这个:http://msdn.microsoft.com/en-us/data/dn456843 using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.SqlClient; using System.Linq; using System.Transactions; namespace TransactionsExamples { class TransactionsExample { static void StartOwnTransactionWithinContext() { using (var context = new BloggingContext()) { using (var dbContextTransaction = context.Database.BeginTransaction()) { try { context.Database.ExecuteSqlCommand( @"UPDATE Blogs SET Rating = 5" + " WHERE Name LIKE '%Entity Framework%'" ); var query = context.Posts.Where(p => p.Blog.Rating >= 5); foreach (var post in query) { post.Title += "[Cool Blog]"; } context.SaveChanges(); dbContextTransaction.Commit(); } catch (Exception) { dbContextTransaction.Rollback(); } } } } } }
Adol1111 2014-03-26
  • 打赏
  • 举报
回复
引用 1 楼 feiyun0112 的回复:
using (var transaction = db.Database.BeginTransaction()) { db.Database.ExecuteSqlCommand(sql,args); transaction.Commit(); } ***************************************************************************** 签名档: http://feiyun0112.cnblogs.com/
这种试过了,但是只要执行一次,就自动关闭了,导致下面的无法继续。用的是mysql,不是sql server。不知道是不是mysql的bug
feiyun0112 2014-03-26
  • 打赏
  • 举报
回复
using (var transaction = db.Database.BeginTransaction())
{
db.Database.ExecuteSqlCommand(sql,args);

transaction.Commit();

}

*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧