2017-10-19 11 views
0

2つのセーブのトランザクションを作成したいとします.1つはエンティティフレームワークのコンテキストで、もう1つはsqlコマンドで行います。contextとsqlコマンドでトランザクションを作成するC#

どのようにして1つの接続を取得し、もう一方に渡してトランザクションを作成しますか?例えば

var ctx = ApplicationContext(); 
var tr = ctx.Transaction.where(x=>x.id=1); 
tr.status = 5; 
ctx.SaveChanges(); 

using (SqlConnection connection = new SqlConnection(ConnectionString)) 
{ 
    using (SqlCommand command = new SqlCommand(query, connection)) 
    { //set query and params 
    connection.Open(); 
    command.ExecuteNonQuery(); 

    } 
+0

を使用しているEntityFrameworkの何versione再びコードを簡素化することができExecuteSqlCommandと呼ばれる方法の存在に気づくでしょう? – Steve

+0

エンティティフレームワーク6 – piris

答えて

0

私は、現時点ではそれをテストすることはできないですが、あなたはDbContextの Database propertyで見ることができます。ここでは、トランザクションオブジェクトと接続自体を取得するためのプロパティとメソッドを見つけることができます。

あなたのコマンド

var ctx = ApplicationContext(); 
using(var tr = ctx.Database.BeginTransaction()) 
{ 
    ctx.SaveChanges(); 

    // Not sure if at this point the connection is still open 
    // or not disposed. You need to experiment here. 

    using (SqlCommand command = new SqlCommand(query, ctx.Database.Connection)) 
    { 
     command.ExecuteNonQuery(); 
     tr.Commit(); 
    } 
} 

のためにそれらを使用することができます。しかし、この時点で、あなたはおそらく、あなたがここに

+1

私はそれを試してみます、ありがとう。ここで少し違う答えが見つかりました:最初に接続を作成するhttps://msdn.microsoft.com/en-us/library/dn456843%28v=vs.113%29.aspx?f=255&MSPPError=-2147217396 – piris

関連する問題