迁移 C# MVC ASP.NET

Migrations C# MVC ASP.NET

我想对这个种子做一个简单的解释。

此代码有效。

 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" }
        //    );
        //
    }

所以我的问题是关于这条线的。

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

所以我们有 (r = >r.Name) 作为第一个参数。但我真的不明白,我们尝试访问角色字段 属性 名称。但是我们没有对它做任何事情。然后是第二个参数,我们访问并创建了一个新的 IdentityRole 对象并插入 "Admin" 作为传递它的名称 属性。 <- 第二个参数很容易理解,但是我们刚刚在第一个参数中做了什么?

据我了解,我们只是访问了 AddOrUpdate 上的名称 属性,但并未对其执行任何操作。任何解释都会很好,因为我不想在不理解的情况下仅仅依赖工作代码。

第一个参数是 Key,它通过它标识操作应该是添加还是更新。 EF 将按该列作为键搜索记录。如果找到一条记录,它将更新该记录或插入一条新记录。

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

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

https://msdn.microsoft.com/en-us/library/hh846514(v=vs.103).aspx