首页 > 代码库 > Entity Framework,TransactionScope 混合使用的问题讨论
Entity Framework,TransactionScope 混合使用的问题讨论
using (var ts = new TransactionScope()){ string connStr = "Data Source=.;Initial Catalog=Test;Integrated Security=true;"; using (SqlConnection connection = new SqlConnection(connStr)) { // Create the command and set its properties. SqlCommand command = new SqlCommand(); command.Connection = connection; command.CommandText = "InsertMessage"; command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@ID", 1)); command.Parameters.Add(new SqlParameter("@Message", "dfd")); connection.Open(); command.ExecuteNonQuery(); connection.Close(); using (var context = new Entities()) { context.Message.Add(new Message { ID = 222, Msg = "dfdfd" }); context.SaveChanges(); } } ts.Complete();}
会报错,除非你打开MSDTS这个windows service
原因是:If you use a single connection within a TransactionScope, it will be done as a local transaction (handled within that connection). If multiple db connections are involved, it will be escalated to a distributed transaction which requires that MSDTC is running on both the machine where your code runs and on the DB server, and that MSDTC on the client has permissions to communicate with MSDTC on the server (http://www.datazx.cn/Forums/en-US/0a365486-c57a-4ee9-a59f-e90a4a4abfbf/action?forum=adodotnetentityframework)
EntityFramework5有一个办法可以解决这个问题
using (var context = new Entities()){ context.Database.Connection.ConnectionString = connStr; context.Message.Add(new Message { ID = 222, Msg = "dfdfd" }); context.SaveChanges();}
以下版本暂时没找到好的办法,大家有什么方法吗?
Entity Framework,TransactionScope 混合使用的问题讨论
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。