码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-01-07 18:43:42      阅读:160      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!