我有一个简单的DbContext,MyDbContext,带有2个DbSets:
public DbSet<User> Users { get; set; }
public DbSet<Privilege> Privileges { get; set; }
在PM控制台中运行add-migration时,成功生成了迁移。然后我添加了代码来播种Privileges表。我添加的代码在Startup.Configure()中:
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
serviceScope.ServiceProvider.GetService<OneSourceDbContext>().Database.Migrate();
serviceScope.ServiceProvider.GetService<OneSourceDbContext>().EnsureSeedData();
}
EnsureSeedData是一个扩展方法,如下所示:
public static void EnsureSeedData(this OneSourceDbContext context)
{
if (!context.Database.GetPendingMigrations().Any())
{
if (!context.Privileges.Any())
{
context.Privileges.Add(new Models.Privilege { Name = "Add/Edit" });
context.SaveChanges();
}
}
}
添加此代码后,我删除了所有迁移并再次尝试生成,但这次是说权限是无效对象。此外,即使我还没有运行项目并且没有调用update-database,也会生成一个空数据库。如果我在Configure()方法中注释掉EnsureSeedData,则会生成迁移。
我认为只有在运行项目时才会调用2行Database.Migrate()和EnsureSeedData(),但似乎在EnsureSeedData()内部进行了检查
!context.Privileges.Any()
导致迁移失败。添加迁移是否真的在Startup中调用Configure()?它令人困惑,因为我只想创建迁移文件,为什么它运行(或似乎运行)EnsureSeedData()?
答案 0 :(得分:3)
data-min="10"
应该只包含配置请求管道的代码。任何应用启动/初始化代码都应该放在var max = parseInt($('#weight').attr('data-min'));
。