Transaction Promotion su database SQL Azure

Abilitando l’autenticazione tramite ASP.NET Identity 2 abbiamo avuto la necessità di creare una transazione (tramite TrasactionScope) che effettuasse la scrittura su tabelle dello stesso database ma su schemi diversi.
La situazione è la seguente:
– due stringhe di connessione identiche, una per lo schema di dominio, l’altra per lo schema ASP.NET Indentity, per le quali cambiavano i soli metadata;
– scritture che avvengono tramite ORM differenti: una tramite EntityFramework 6 Model first e l’altra tramite Entity Framework 6 Code First.

Il problema si scatena alla complete delle transazioni con il seguente messaggio: “The underlying provider failed on Open“. Esaminando l’InnerException si scopre che SQL Azure tenta di eseguire la Promotion della transazione su DTS e questo genera il problema su SQL Azure.
In realtà, consultando la documentazione ufficiale la Promotion non dovrebbe mai avvenire se le connection string sono identiche e allo stesso database.
La soluzione è quella di creare l’utente di database e cambiare conseguentemente le stringhe di connessione.

Script per creazione utente su SQL Azure:
da eseguire su database master
CREATE LOGIN myuser WITH password=[password]
GO
CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[dbo]
GO
da eseguire su database specifico
CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[dbo]
GO
EXEC sp_addrolemember ‘db_owner’, ‘myuser’;
GO

 

Gianvito Casulli

0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *