C# ASP.NET 5 MVC 6和实体框架7问题
我们不能将Owin和实体框架7一起添加。这样一来,Microsoft.AspNet.Identity.core 2.0.0.0和Microsoft.AspNet.Identity 3.0.0 Beta1之间就会出现歧义 因此,我无法在应用程序中实现角色提供程序来管理用户角色 面对这个问题后,我删除了Owin引用,并使用 Microsoft.AspNet.Identity 3.0.0和EF 7,但UserManager.AddToRoleAsync(用户,roleName)始终引发异常,如下所示:- InvalidOperationException:无法跟踪实体类型“Mozaics.DAL.Models.ApplicationUser”的实例,因为另一个 已在跟踪具有相同密钥的此类型的实例。对于 新实体考虑使用iIdID生成唯一性。 关键值 代码片段是这样的C# ASP.NET 5 MVC 6和实体框架7问题,c#,asp.net-core,asp.net-core-mvc,entity-framework-core,C#,Asp.net Core,Asp.net Core Mvc,Entity Framework Core,我们不能将Owin和实体框架7一起添加。这样一来,Microsoft.AspNet.Identity.core 2.0.0.0和Microsoft.AspNet.Identity 3.0.0 Beta1之间就会出现歧义 因此,我无法在应用程序中实现角色提供程序来管理用户角色 面对这个问题后,我删除了Owin引用,并使用 Microsoft.AspNet.Identity 3.0.0和EF 7,但UserManager.AddToRoleAsync(用户,roleName)始终引发异常,如下所示:
public async Task<ActionResult> RoleAddToUser(string UserName, string RoleName)
{
var user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var result = await UserManager.AddToRoleAsync(user, RoleName );
ViewBag.ResultMessage = "Role created successfully !";
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
return View("ManageUserRoles");
}
public异步任务RoleAddToUser(字符串用户名,字符串RoleName)
{
var user=context.Users.Where(u=>u.UserName.Equals(UserName,StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var result=await UserManager.AddToRoleAsync(用户,RoleName);
ViewBag.ResultMessage=“角色创建成功!”;
var list=context.Roles.OrderBy(r=>r.Name).ToList().Select(rr=>newselectListItem{Value=rr.Name.ToString(),Text=rr.Name}.ToList();
ViewBag.Roles=列表;
返回视图(“ManageUserRoles”);
}
@sanjaypujari
试试这个:
var user = await context.FindByNameAsync(UserName);
ApplicationUser appuser = (ApplicationUser)user;
var result = await UserManager.AddToRoleAsync(appuser, RoleName);
这样执行时,ApplicationUser不应被跟踪两次。
如果您想更新应用程序用户,同样的事情也会有所帮助。我将讨论这个问题。一个对我有效的解决方案是通过UserManager获取用户,然后添加角色: 而不是
var user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var result = await UserManager.AddToRoleAsync(user, RoleName );
使用以下命令
var user = await UserManager.FindByNameAsync(UserName);
var result = await UserManager.AddToRoleAsync(user, RoleName );
在Microsoft.AspNet.Identity.Core库中,该方法类似于UserManager.AddRoleToUserAsync(User.Id,RoleName),请您向我们提供您的
project.json
,以及项目属性中的运行时和dnvm列表的输出。谢谢