2015-04-13 4 views
0

Я хотел бы иметь простое объяснение об этом посеве.Миграции 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 == "[email protected]")) 
     { 
      var users = new ApplicationUser { Email = "[email protected]", UserName = "[email protected]", }; 
      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.Name) В качестве первого параметра. Но я действительно этого не понимаю. Мы пытаемся получить доступ к названию свойства Роли. Но мы ничего не сделали с этим. Затем во втором параметре мы получим доступ и создали новый объект IdentityRole и вставили «Admin», чтобы передать его Свойство Name. < - Второй параметр легко понять, но что мы только что сделали в первом параметре?

Понятно, что мы просто получили доступ к свойству Name на AddOrUpdate, но ничего не сделали с ним. Любое объяснение было бы замечательным, поскольку я не хочу просто полагаться на рабочий код, не понимая его.

+0

Я принял оба ответа, поскольку они оба правильные. Но я выбираю ответ Правеена, добавив, что «else вставить новую запись». Но ссылка Stefano Provided me заставляет меня понять, как была создана AddOrUpdate. – Aizen

ответ

1

Первым параметром является Ключ, посредством которого он идентифицирует, должна ли операция быть добавлением или обновлением. EF будет искать запись в этом столбце в качестве ключа. Если он найдет запись, она обновит запись или добавит новую запись.

1

Это вопрос о выражениях. Цель этого параметра - указать EF, который является полем, используемым для идентификации записи, в этом случае это поле Name.

Это отличается от основного ключа, поскольку он может быть автоматически генерируемым полем.

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

Смежные вопросы