2017-10-19 9 views
0

Je voudrais créer une transaction de deux sauvegardes: l'une via le contexte de l'infrastructure et l'autre en utilisant la commande sql.Créer une transaction avec commande contextuelle et sql, C#

Comment puis-je obtenir la connexion d'un, le transmettre à l'autre et créer une transaction?

Par exemple:

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

Que versione de EntityFramework vous utilisez ici ? – Steve

+0

Entity Framework 6 – piris

Répondre

0

Je ne suis pas en mesure de le tester pour le moment, mais vous pouvez regarder le Database property du DbContext. Ici vous pouvez trouver des propriétés et des méthodes pour obtenir un objet de transaction et la connexion elle-même.

Vous pouvez les utiliser pour votre commande

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(); 
    } 
} 

Mais à ce stade, vous remarquerez l'existence d'une méthode appelée ExecuteSqlCommand qui pourrait probablement simplifier à nouveau le code

+1

Je vais essayer, merci. Trouvé une réponse légèrement différente ici: https://msdn.microsoft.com/en-us/library/dn456843%28v=vs.113%29.aspx?f=255&MSPPError=-2147217396 qui crée la connexion d'abord – piris