2

我的新 EF5 Code First 应用程序利用了新的迁移支持,发生了这种奇怪的事情。我看到的一件事是数据库播种例程在初始数据库负载上运行,但奇怪的是它似乎在应用程序一段时间未运行后再次运行。这是可以预料的吗?防止这种情况发生的最好方法是什么?

我得到了整个 .AddOrUpdate(),但与应用程序第一次运行并创建数据库模式时相比,运行它似乎仍然很奇怪。想法?

4

2 回答 2

2

是的,这是预期的行为。即使没有要应用的架构更改,Seed 方法也会运行。

如果您在 Seed 方法中进行了大量工作并希望获得更多控制权,您可以执行一些操作,例如将应用程序设置添加到项目的 .config 文件中:

<appSettings>
    <add key="seedDatabase" value="true"/>
</appSettings>

然后检查 Seed 方法中的设置。

protected override void Seed(BarDb context)
{
    if(ConfigurationManager.AppSettings["seedDatabase"] == "true")
    {
        // ... seed logic
    }            
}
于 2012-11-02T12:35:38.863 回答
0

我的理解是,AutomaticMigrationsEnabled在配置中设置为 true 时,每次应用启动时都会触发迁移(这可能是您在应用一段时间未运行时看到该行为的原因)。

问题是即使没有要迁移的东西,迁移代码也会运行种子。我会使用类似于@OdeToCode 的解决方案,但我宁愿使用数据库本身完成检查(例如测试表是否为空等)

实际上,新Enable-Migrations命令将在生成的文件中将 设置AutomaticMigrationsEnabled为 false 。Configuration.cs

初始化程序确实是设置数据库的另一种形式,正如您正确地说它们在测试/原型设计上下文中更有用,允许您每次将数据库重置为已知状态。它看起来像重复的功能,但用途不同:在生产数据库中,我不会使用预烘焙的初始化程序之一。

于 2013-01-21T11:20:21.070 回答