/ / Jak zidentyfikować połączenia PetaPoco takie same lub różne w ramach transakcji? - orm, połączenie z bazą danych, petapoco

Jak zidentyfikować połączenia PetaPoco takie same lub różne w ramach transakcji? - orm, połączenie z bazą danych, petapoco

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

W tym przypadku mam dwa obiekty bazy danych (db iOwndb) .Czasami Transakcja nie działa poprawnie, ponieważ dwa połączenia są różne, więc muszę zidentyfikować każde połączenie, na przykład przez connect_id lub proszę podzielić się swoją opinią lub pomysłami.

Odpowiedzi:

1 dla odpowiedzi № 1

Ponieważ wskazane jest użycie tego samego połączenia za pośrednictwem żądania, mam dwie metody statyczne:

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

A potem masz pewność, że używasz tego samego połączenia

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