- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我将 Entity Framework 6 与此 DbMigrationsConfiguration
结合使用:
public sealed class Configuration : DbMigrationsConfiguration<DataContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(Danfoss.EnergyEfficiency.Data.DataContext context)
{
//Adding initial data to context
context.SaveChanges();
}
}
我以这种方式在 WebAPI 中使用它:
public static void Register(HttpConfiguration config)
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, Configuration>());
}
我注意到每次我的应用程序启动时,Seed
函数都会运行。我怎样才能防止这种情况发生?我只喜欢它在第一次运行时运行,当它构建初始表时。
最佳答案
每次调用 Update-Database
时都会调用 DbMigrationsConfiguration.Seed
方法。 One Unicorn 在此博客中解释了其背后的原因。 .
这意味着您必须编写Seed
代码来处理现有数据。如果你不喜欢那样,你可以在 CodePlex 上投票改变.
在此期间,引用博客:
The best way to handle this is usually to not use AddOrUpdate for every entity, but to instead be more intentional about checking the database for existing data using any mechanisms that are appropriate. For example, Seed might check whether or not one representative entity exists and then branch on that result to either update everything or insert everything
我过去使用的另一个选项是使用 Sql
命令在迁移本身中添加与迁移相关的常设数据。这样它只运行一次。我倾向于远离这一点,因为我更喜欢将播种保留在一个地方。
关于c# - Entity Framework : Only Seed when building initial database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816178/
我是一名优秀的程序员,十分优秀!