我正在使用 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
函数都在运行。我怎么能阻止这个?我只喜欢它在第一次运行时运行,当它构建初始表时。
答案 0 :(得分:4)
每次调用DbMigrationsConfiguration.Seed
时都会调用Update-Database
方法。 {/ 3}}在本博客中解释了背后的原因。
这意味着您必须编写Seed
代码以应对现有数据。如果您不喜欢,可以在One Unicorn投票支持更改。
与此同时,引用博客:
处理此问题的最佳方法通常是不使用AddOrUpdate 每个实体,但更有意义的是检查 使用适当的任何机制的现有数据的数据库。 例如,Seed可能会检查一个代表实体是否存在 存在然后在该结果上分支以更新所有内容或 插入所有内容
我过去使用的另一个选项是使用Sql
命令添加与迁移本身中的迁移相关的常设数据。这样它只运行一次。我倾向于放弃这一点,因为我更喜欢将播种放在一个地方。
答案 1 :(得分:0)
我遇到了同样的问题,我希望在数据库构建中创建一个初始用户。我要做的是创建一个空白迁移,然后在其中添加用户创建。由于从技术上讲,除非删除并重新应用迁移,否则迁移仅运行一次,因此可以确保迁移仅在创建数据库时运行一次。 我知道这个问题有点老了,因此它可能会对其他人有所帮助,或者您可能没有使用迁移。但是,如果您愿意,这是一种方便的技术。