2015-11-08 48 views
0

我有一个带有代码优先实体框架的MVC Web应用程序。我们将这个应用程序安装在各种计算机上作为本地应用我进行了迁移以升级数据库(在这种情况下,我添加了一个新表),并且在升级后运行迁移后,我想将初始数据插入数据库,以便用户可以添加/编辑/删除它们,但是我不希望桌子第一次变空。EF迁移后插入初始值

有没有办法在升级时自动执行它,而无需手动运行SQL脚本?

+0

搜索EF播种的数据库,这可能帮助你 – brykneval

+0

种子不仅在第一次创建数据库时?只需经过特定的迁移 – TamarG

+0

并且我不希望我的代码将运行多次,如果我将来添加更多迁移... – TamarG

回答

1

移民类有up方法,您可以使用SQL覆盖它并插入/更新记录:

public override void Up() { 
AddColumn("dbo.Posts", "Abstract", c => c.String()); 
Sql("UPDATE dbo.Posts SET Abstract = LEFT(Content, 100) WHERE Abstract IS NULL"); 
} 

Source

+0

谢谢!有效!我用了很多Sql(“INSERT [dbo] .....”)并且它完美地完成了。 – TamarG

0

是的。您基本上编写了一个类来有条件地检查并插入值,然后将此类链接到实体框架数据库初始化程序。每次执行迁移时它都会运行,但我认为您可以在运行时准确更改(例如,应用程序启动)。

此链接会给你粗略的想法: Entity Framework Inserting Initial Data On Rebuild

我有我的电脑上一个确切的代码示例,但我不会它,直到明天。如果这个链接不完全符合你的要求,我明天可以向你发送一些代码。