renholm:
Jag förstår inte riktigt hur du har byggt upp din struktur :(
Jag kan dock berätta hur jag hade gjort/gör.
Först har jag en DataAccess klass som är en static klass som (för enkelhetens skull) har 4 publica metoder.
public static void Execute(SqlCommand, Transaction){}
public static Transaction BeginTransaction()
public static void CommitTransaction(Transaction){}
public static void RollbackTransaction(Transaction){}
Jag har sedan en DataManager klass som också är static som fyller mina objekt med data från databasen
public static void Load(object, Transaction){}
public static void Save(object, Transaction){}
public static void Delete(object, Transaction){}
Sedan så har jag mina olika affärsobjekt säg COrder och CVarukorg. Genom klassen DataManager så kan jag Ladda, spara och delete ett objekt från/till databasen typ så här.
COrder oOrder = new COrder();
oOrder.StoreProcedureName = "SP_SaveOrder";
oOrder.ArtikelNr = 1;
.
.
.
DataManager.Save(oOrder);
Med denna kod så skapar jag ett nytt Order objekt berättar att min storeprocedure som skall köras när jag vill spara/ladda/deleta objektet från databasen. Fyller mitt objekt med data och skickar sedan detta objekt till DataManager klassen sparar ner mitt objekt till databasen.
Om jag nu vill ta mitt order objekt och uppdatera min varukorg med den datan, och sedan ta bort order objektet, så vill det ju till att uppdateringen av varuobjektet gått bra annars vill jag inte ta bort orderobjektet, och om jag inte kan ta bort oderobjektet så vill jag inte uppdatera varukorgen.
SqlTransaction oTransaction = DataAccess.BeginTransaction();
try{
//-- lägger orderobjektet till varukorgen
oVaruKorg.Add(oOrder);
//-- okej ta bort orderobjektet
DataManager.Delete(oOrder, oTransaction);
//-- updatera vår varukorg
DataManager.Save(oVaruKorg, oTransaction);
//-- okej allt gick bra, commita vår transaction
DataAccess.CommitTransaction(oTransaction);
}catch(Exception e){
DataAccess.RollbackTransaction(oTransaction);
}
Nu så kommer allt gå bra, eller så kommer allt rullas tillbaka i databasen, du får manuellt ta bort objektet från varukorgen om det har lagts till och man sedan fick ett fel, så att transactionen inte blir commitat.
Transaction över flera olika databaser kan man inte lösa i koden utan måste så fall blanda in COM+ och transaktionshantering där.
- M