Problema. In uno scenario di registrazione, sto cercando di inserire un utente nella mia tabella Utente e quindi di chiamare WebSercurity.CreateAccount
per quell'utente (in una transazione). Ciò causa l'errore che MS DTC non è disponibile sul server.utilizzando WebSercurity.CreateAccount con altre query in un TrasactionScope, senza DTC abilitato
Descrizione. Il motivo per cui sto facendo questo è perché ho un'entitàche eredita da User
, quindi non è possibile utilizzare WebSercurity.CreateUserAndAccount
perché non sa di Customer
e inserisce semplicemente un record User
.
Sto utilizzando Asp.net MVC 4 con EntityFramework 5, CodeFirst e SQL Server 2008 R2.
sarebbe apprezzato qualsiasi suggerimento per non usare DTC!
MODIFICA. È ovvio perché si verifica questo errore, perché websecurity utilizza la propria connessione al database e i miei repository utilizzano un'altra connessione, sebbene io abbia configurato la funzione simplemembership per utilizzare la stessa classe DbContext
come repository, ma il problema è che crea un nuova istanza di DbContext
...
Speravo se ci fosse un modo per passare un oggetto contesto esistente, o una connessione allo WebSecurity
da usare con i suoi metodi.
Ecco il codice:
if (ModelState.IsValid)
{
//using (TransactionScope tx = new TransactionScope())
//{
UnitOfWork.UserRepository.Insert(new Customer
{
FirstName = model.FirstName,
LastName = model.LastName,
Email = model.Email,
Tel = model.Tel,
Mobile = model.Mobile,
BirthDate = model.BirthDate,
InsertDate = DateTime.Now,
UserType = UserType.Customer,
MaritalStatus = model.MaritalStatus,
ZipCode = model.ZipCode,
StreetAddress = model.StreetAddress,
City = model.City,
State = model.State
});
UnitOfWork.Commit();
string token = WebSecurity.CreateAccount(model.Email, model.Password, true);
Roles.AddUserToRole(model.Email, "Customer");
//WebSecurity.Login(model.Email, model.Password, true);
await Task.Run(() => EmailHelper.SendConfrimationEmail(token, model.Email));
// tx.Complete();
//}
Grazie, sì, lo so, non c'è un modo per passare la connessione ai metodi 'WebSecurity'? quali fornitori di abbonamento suggerisci? – Ashkan