【发布时间】:2015-01-26 11:52:39
【问题描述】:
我使用 EF6.1 处理 MVC 5 项目。作为初学者,我尝试保留 MVC 5 模板生成的代码,以便将默认身份验证系统与 AccountController 一起使用。 但是,我必须添加一些类,例如下面的“User.cs”,所以我使用的是实体框架数据模型。
public partial class User
{
public User()
{
this.Logs= new HashSet<Log>();
}
public int IdUser { get; set; }
public string AspNetUsersId { get; set; } //References to AspNetUsers.Id
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Job{ get; set; }
public virtual ICollection<Log> Logs { get; set; }
}
所以,我有两种情况:
public partial class MyEFDataModelContainer : DbContext
{
public MyEFDataModelContainer ()
: base("name=MyEFDataModelContainer")
{
}
public DbSet<User> Users { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
所以,我的场景是我需要创建一个 AspNetUsers,然后向这个 AspNetUsers 添加一个 AspNetRoles,然后创建一个用户。我们假设 AspNetUsers 创建和 AspNetRoles 工作,但如果用户创建失败,我该如何回滚 AspNetUsers 和 AspNetRoles?
我可以使用这两个上下文创建事务吗?
很遗憾,我还需要调用 WCF webservices 来执行这个任务?我能做什么?
最好的问候,
更新
我的合并上下文:
public partial class User: IdentityUser { }
public partial class MyEFDataModelContainer : IdentityDbContext<User>
{
public MyEFDataModelContainer() : base("name=MyEFDataModelContainer")
{ }
}
我的 AccountController.cs:
public class AccountController : Controller
{
public AccountController()
{
UserManager =new UserManager<User>(new UserStore<User>(new MyEFDataModelContainer()))
}
public UserManager<User> UserManager {get;set;}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new USER() { UserName = model.UserName, Email = model.Email, PhoneNumber = model.Phone };
var result = await UserManager.CreateAsync(user, model.Password);
var role = await UserManager.AddToRoleAsync(user.Id, "Membre");
if (result.Succeeded)
{
using (UserBusiness business = new UserBusiness())
{
var userResult = business.AddUser(model.FirstName, model.LastName, user.Id);
}
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
return View(model);
}
}
我的 Web.config :
<connectionStrings>
<add name="MyEFDataModelContainer" connectionString="metadata=res://*/MyEFDataModel.csdl|res://*/MyEFDataModel.ssdl|res://*/MyEFDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost;initial catalog=DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
但现在,我遇到了错误 LINQ to Entities 不支持指定的类型成员“用户名”。仅支持初始化器、实体成员和实体导航属性。在以下行:
var result = await UserManager.CreateAsync(user, model.Password);
【问题讨论】:
标签: c# asp.net-mvc entity-framework transactions asp.net-mvc-5