Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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#MVC ASP.NET_C#_Asp.net_Asp.net Mvc_User Roles_Asp.net Roles - Fatal编程技术网

迁移C#MVC ASP.NET

迁移C#MVC ASP.NET,c#,asp.net,asp.net-mvc,user-roles,asp.net-roles,C#,Asp.net,Asp.net Mvc,User Roles,Asp.net Roles,我想简单地解释一下这一点 这个代码有效 protected override void Seed(RMQ.Models.ApplicationDbContext context) { var userStore = new UserStore<ApplicationUser>(context); var userManager = new UserManager<ApplicationUser>(userStore);

我想简单地解释一下这一点

这个代码有效

 protected override void Seed(RMQ.Models.ApplicationDbContext context)
    {

        var userStore = new UserStore<ApplicationUser>(context);
        var userManager = new UserManager<ApplicationUser>(userStore);

        if (!context.Users.Any(t => t.UserName == "Admin@RMQ.com"))
        {
            var users = new ApplicationUser { Email = "Admin@RMQ.com", UserName = "Admin@RMQ.com", };
            userManager.Create(users, "Password1!");

            context.Roles.AddOrUpdate(r => r.Name, new IdentityRole { Name = "Admin" });
            context.SaveChanges();

            userManager.AddToRole(users.Id, "Admin");
        }

        //  This method will be called after migrating to the latest version.

        //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
        //  to avoid creating duplicate seed data. E.g.
        //
        //    context.People.AddOrUpdate(
        //      p => p.FullName,
        //      new Person { FullName = "Andrew Peters" },
        //      new Person { FullName = "Brice Lambson" },
        //      new Person { FullName = "Rowan Miller" }
        //    );
        //
    }
所以我们有
(r=>r.Name)作为第一个参数。但我真的不明白,我们试图访问角色字段属性名。但我们什么也没做。然后是第二个参数,我们访问并创建了一个新的IdentityRole对象,并插入“Admin”作为传递其Name属性 第一个参数是,它通过该键标识操作是添加还是更新。EF将按该列作为键搜索记录。如果找到一条记录,它将更新该记录或插入一条新记录。

这是一个关于表达式的更复杂的问题。 此参数的目的是告诉EF要用于标识条目的字段,在本例中是名称字段

这与主键不同,因为它可以是自动生成的字段


我接受了这两个答案,因为它们都是正确的。但我选择了Praveens的答案,因为他添加了“else insert a new record”。但是Stefano提供给我的链接让我了解了AddOrUpdate是如何构造的。
context.Roles.AddOrUpdate(r => r.Name, new IdentityRole { Name = "Admin" });