[英]EF Code First update-database -script not running Seed() method
在我的Entity Framework Code First项目中,如果我运行
update-database
通过Package Manage Console命令,我的Seed()
方法成功运行。 但是,如果我使用-script参数运行命令:
update-database -script
...没有调用Seed()方法,并且生成的SQL不包含用于播种数据库的SQL命令。 此行为是可重复的。 我正在尝试创建完整的数据库脚本以进行部署。
为什么使用-script
和不使用-script
的SQL命令之间存在差异,以及如何使用-script
开关获取update-database
以运行Seed()
方法?
我认为这不是差异,而是设计使然。
例如,当您使用-script
,不会执行数据库更新,因此也不应该调用Seed()
方法。 还有一个事实是,迁移是一种设计时工具,而Seed()
是一种已在运行时进行编译和调用的方法。
至于为什么生成的脚本中不包含Seed()
方法的内容,我的答案也是运行时和设计时间的不同概念。 想象一下,您有如下的Seed()
方法:
protected override void Seed(PersonContext context)
{
Random r = new Random();
context.People.Add(new Person("PersonA", r.Next(90));
context.SaveChanges();
}
现在,在运行时创建Random
实例,并在运行时调用Next()。 您将如何尝试将其编译为SQL? 如果您有一个文件并从中读取数据并将其放入数据库,该怎么办? 这些都是在设计时无法仅在运行时进行评估的事情(即,如果文件在设计时不在正确的位置,则仅在运行时没有问题)。 这就是为什么诸如迁移脚手架之类的设计时工具无法对其进行评估的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.