問題。登録シナリオでは、Userテーブルにユーザーを挿入してから、WebSercurity.CreateAccount
そのユーザーを(トランザクションで)呼び出しようとしています。これにより、MSDTCがサーバーで利用できないというエラーが発生します。
説明。私がこれを行っている理由は、Customer
から継承するエンティティがあるためです。そのため、レコードを認識せず、レコードを挿入するだけなUser
ので、WebSercurity.CreateUserAndAccount
使用できません。Customer
User
Asp.net MVC4をEntityFramework5、CodeFirst、およびSQL Server2008R2で使用しています。
DTCを使用しないための提案をいただければ幸いです。
編集。DbContext
websecurityがデータベースへの独自の接続を使用し、リポジトリが別の接続を使用するため、このエラーが発生する理由は明らかです。ただし、リポジトリと同じクラス
を使用するようにsimplemembershipを構成しましたが、問題は、 DbContext
... _
既存のコンテキストオブジェクトを渡す方法、またはWebSecurity
そのメソッドで使用するためのへの接続があるかどうかを期待していました。
コードは次のとおりです。
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();
//}