ObjectContext имеет свойство подключения, которое вы можете использовать для управления транзакциями.
using (var context = new BlahEntities())
using (var tx = context.BeginTransaction())
{
// do db stuff here...
tx.Commit();
}
В случае исключения транзакция будет отменена. Поскольку вызов BeginTransaction () требует открытого соединения, имеет смысл заключить вызов BeginTransaction, возможно, в метод расширения.
public static DbTransaction BeginTransaction(this ObjectContext context)
{
if (context.Connection.State != ConnectionState.Open)
{
context.Connection.Open();
}
return context.Connection.BeginTransaction();
}
Один сценарий, в котором, как я полагаю, этот подход может быть полезен для TransactionScope, - это когда вам требуется доступ к двум источникам данных и требуется только транзакционный контроль над одним из соединений. Я думаю, что в этом случае TransactionScope перейдет в распределенную транзакцию, которая может не потребоваться.