Vea el código a continuación. Si inicializo más de un contexto de entidad, entonces obtengo la siguiente excepción en el 2º conjunto de código solo. Si comento el segundo set, funciona.¿Por qué TransactionScope no funciona con Entity Framework?
{ "El proveedor subyacente no se ajustó en Abrir."}
interno: { "La comunicación con el administrador de transacciones subyacente ha fallado."}
interno: { "Error HRESULT E_FAIL ha sido devuelto desde una llamada a un componente COM. "}
Tenga en cuenta que esta es una aplicación de muestra y sé que no tiene sentido crear 2 contextos en una fila. Sin embargo, el código de producción tiene motivos para crear contextos múltiples en el mismo TransactionScope
, y esto no puede modificarse.
Editar
Aquí es una pregunta anterior de mí tratando de establecer MS-DTC. Parece estar habilitado tanto en el servidor como en el cliente. No estoy seguro de si está configurado correctamente. También tenga en cuenta que una de las razones por las que estoy tratando de hacer esto es que el código existente en el TransactionScope
usa ADO.NET y Linq 2 Sql ... Me gustaría que también usen la misma transacción. (Eso probablemente suene loco, pero necesito hacerlo funcionar si es posible).
How do I use TransactionScope in C#?
Solución
Firewall de Windows estaba bloqueando las conexiones con MS-DTC.
using(TransactionScope ts = new System.Transactions.TransactionScope())
{
using (DatabaseEntityModel o = new DatabaseEntityModel())
{
var v = (from s in o.Advertiser select s).First();
v.AcceptableLength = 1;
o.SaveChanges();
}
//-> By commenting out this section, it works
using (DatabaseEntityModel o = new DatabaseEntityModel())
{
//Exception on this next line
var v = (from s1 in o.Advertiser select s1).First(); v.AcceptableLength = 1;
o.SaveChanges();
}
//->
ts.Complete();
}
Esto funciona ahora. Windows Firewall estaba bloqueando las conexiones a MS-DTC. – NotDan