首页 > 其他 > 详细

Entity Framework,TransactionScope 混合使用的问题讨论

时间:2015-01-07 18:40:28      阅读:229      评论:0      收藏:0      [点我收藏+]
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 混合使用的问题讨论

原文:http://www.cnblogs.com/cqcmdwym/p/4209020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!