我正在使用实体框架代码第一次使用迁移工作4.3。 在本地运行时,我的web.config被配置为以数据库初始化为目标,该初始化实现了CreateDatabaseIfNotExists<DataContext>
,它为我的开发数据库提供了测试数据,同时也在第一次运行时填充了各种“静态”可查找数据。使用实体框架迁移进行种子和分支项目
一旦开发数据库已经被创建,对数据库的任何后续修改都会添加到项目的迁移并使用'updata-database'PS命令更新数据库。
当我对项目感到满意时,我使用webdeploy部署代码,但手动复制数据库,因为webdeploy不包含迁移表。部署时,我使用web.config转换来设置实现MigrateDatabaseToLatestVersion<DataContext>
的新数据库初始值设定项。然后这将应用之后部署的基于代码的新迁移。 这一切都工作得很好,但我担心这是不是用测试数据初始化我的数据库,而是运行应用程序所需的数据的最佳方法。 我正在寻找的是创建初始种子数据而不必将其挂接到CreateDatabaseIfNotExists<DataContext>
而是将其挂接到迁移中的好方法。 我意识到在配置类上有一个种子方法,但看到它在每次迁移时都更新数据库,这是不可取的解决方案。
该项目是在TFS中,我不时需要创建这个项目的一个新的分支,这是本质的第一个克隆。当第一次在本地运行这个数据库时,数据库还不存在,但会像前面解释的那样创建和播种。现在最大的问题是,以前通过迁移处理的模式更改现在将在首次创建数据库时应用。如果我然后尝试添加新的迁移文件并运行'update-database',我会遇到难题,因为它无法运行先前的迁移,因为在创建数据库时已经应用了这些更改。我只能想象我在这里做错了什么或者只是错过了一个窍门。
总之我正在寻找关于创建使用迁移首次数据库时,种子初始测试数据&所需的应用程序数据
- 最佳方式的信息。
- 分支包含代码迁移项目并首次创建数据库时克服问题的最佳方法。
感谢您的阅读。
我知道所提到的种子的方法。我对使用它的担心是它每次运行迁移时都会执行。 我的一些初步的核心数据会/可以通过应用程序时,它的运行变化,我不希望如果添加了新的迁移它复位。 如果你在配置类包装的种子方法,因此只有执行的“InitialCreate”迁移我想这会工作,但我还没有找到什么好办法做到这一点的一个好方法。 – Drauka 2012-04-19 10:22:14
这是你的责任,以确保调用'Seed'方法是可重复的 - 'AddOrUpdate'可以用它帮助。如果您无法确保将自定义种子SQL语句直接添加到迁移中的“Up”方法。 – 2012-04-19 11:02:26
我明白你在说什么,但使用实体框架的诸多原因之一是为了避免必须编写相对复杂的SQL插入语句。而不是通过上下文播种。我正在寻找一种替代解决方案,并且会发布一次/如果检查正在工作。 – Drauka 2012-04-19 11:16:01