Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET 5 MVC 6和实体框架7问题_C#_Asp.net Core_Asp.net Core Mvc_Entity Framework Core - Fatal编程技术网

C# ASP.NET 5 MVC 6和实体框架7问题

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)始终引发异常,如下所示:

我们不能将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生成唯一性。 关键值

代码片段是这样的

 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列表的输出。谢谢