Vedere il codice qui sotto. Se inizializzo più di un contesto di entità, ottengo la seguente eccezione sul numero di codice solo. Se commento il secondo set funziona.Perché TransactionScope non funziona con Entity Framework?
{ "Il provider sottostante fallito su Open."}
interno: { "La comunicazione con il gestore delle transazioni sottostante ha fallito."}
interno: { "Errore HRESULT_E_FAIL è stato restituito da una chiamata a un componente COM. "}
Si noti che questa è un'app di esempio e so che non ha senso creare 2 contesti di seguito. Tuttavia, il codice di produzione ha motivo di creare più contesti nello stesso TransactionScope
e questo non può essere modificato.
Modifica
Ecco una domanda precedente di me cercando di installare MS-DTC. Sembra essere abilitato sia sul server che sul client. Non sono sicuro se è impostato correttamente. Si noti inoltre che uno dei motivi per cui sto cercando di farlo è che il codice esistente all'interno di TransactionScope
utilizza ADO.NET e Linq 2 Sql ... Vorrei che anche quelli usassero la stessa transazione. (Probabilmente è pazzesco, ma ho bisogno di farlo funzionare se possibile).
How do I use TransactionScope in C#?
Soluzione
Windows Firewall stava bloccando le connessioni a 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();
}
Questo funziona ora. Windows Firewall stava bloccando le connessioni a MS-DTC. – NotDan