2017-01-18 38 views
1
var db=(PetaPoco.Database)HttpContext.Current.Items["application_db"]; 
using(var t=db.GetTransaction()) 
{ 
    // some code 
    db.Save(obj1); 
    OwnExecute(); 
    db.Save(obj3); 
    t.Complete(); 
} 
public void OwnExecute(obj2) 
{ 
    // some code 
    var Owndb=(PetaPoco.Database)HttpContext.Current.Items["appdb"]; 
    Owndb.Save(obj2); 
} 

在这种情况下,我有两个数据库对象(db和Owndb)。有时事务工作不正确,因为两个连接不同。所以我需要通过connect_id来识别每个连接或请分享您的意见或想法。如何识别交易中相同或不同的PetaPoco连接?

回答

1

既然是建议使用通过请求相同的连接,我有这两个静态方法:

public static class DbHelper { 
    public static Database CurrentDb() { 
     if (HttpContext.Current.Items["CurrentDb"] == null) { 
      var retval = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 
      HttpContext.Current.Items["CurrentDb"] = retval; 
      return retval; 
     } 
     return (Database)HttpContext.Current.Items["CurrentDb"]; 
    } 

    public static Database NewDb() { 
     return new DatabaseWithMVCMiniProfiler("MainConnectionString"); 
    } 

然后您放心,您使用的是相同的连接

var db=dbHelper.CurrentDb(); 
using(var t=db.GetTransaction()) 
{ 
    // some code 
    db.Save(obj1); 
    OwnExecute(); 
    db.Save(obj3); 
    t.Complete(); 
} 
public void OwnExecute(obj2) 
{ 
    // some code 
    var Owndb=dbHelper.CurrentDb(); 
    Owndb.Save(obj2); 
} 
+0

感谢,但我目前通过检查是否(数据库==(PetaPoco.Database)HttpContext.Current.Items [“appdb”])然后t.Complete()然后t.RollBack()。 –

+0

它的一个好方法? –

相关问题