2017-01-18 36 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

它的一個好方法? –

相關問題