【发布时间】:2017-06-06 16:03:06
【问题描述】:
我正在创建一个足球经理游戏。我使用了身份 2.0,因为它适用于我的注册和登录。我能够添加所需的额外表格,但现在我需要将球队和球员等数据播种到这些表格中。知道怎么做吗?额外的表是使用迁移在身份模型中创建的。这是我正在使用的表格的图片。
【问题讨论】:
标签: c# entity-framework asp.net-identity-2 asp.net-mvc-5
我正在创建一个足球经理游戏。我使用了身份 2.0,因为它适用于我的注册和登录。我能够添加所需的额外表格,但现在我需要将球队和球员等数据播种到这些表格中。知道怎么做吗?额外的表是使用迁移在身份模型中创建的。这是我正在使用的表格的图片。
【问题讨论】:
标签: c# entity-framework asp.net-identity-2 asp.net-mvc-5
在 Migrations 文件夹中,有一个名为 Configuration.cs 的文件,其中包含可用于创建一些种子数据的 Seed 方法。
protected override void Seed(ApplicationDbContext context)
{
// 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.
//add roles
context.Roles.AddOrUpdate(p => p.Id,
new IdentityRole()
{
Id = EnumUtility<AspNetRoles>.GetAppRoleId(AspNetRoles.None),
Name = AspNetRoles.None.ToString()
});
}
只需运行 update-database,您的表中就应该有数据了。
【讨论】:
有 2 种 Seed() 方法可用 - 一种在某些初始化程序中,例如在创建数据库时运行的 CreateDatabaseIfNotExist。另一个是migration Seed(),只要您通过update-database 应用迁移,它就会运行。
由于它在每次迁移时都会运行,因此您需要确保不会复制数据。您可以通过检查是否存在来做到这一点:
if (!context.Teams.Any())
{
context.Teams.Add(new Team { Name = "Team A" });
context.Teams.Add(new Team { Name = "Team B" });
}
但是有一种专门为迁移设计的更好的方法,称为AddOrUpdate:
protected override void Seed(ApplicationDbContext context)
{
context.Teams.AddOrUpdate(
team => team.Id, // put the key or unique field here
new Team
{
Id = 1,
Name = "Team 1"
},
new Team
{
Id = 2,
Name = "Team 2"
});
context.SaveChanges();
}
【讨论】: