2012-04-09 65 views
1

通过删除EF 4.3中的EdmMetadata表,似乎DropCreateDatabaseIfModelChanges不再有效。可以?EF 4.3中的DropCreateDatabaseIfModelChanges发生了什么变化?

OR

是否有申报初始化我在EF 4.2的SEED方法做的方法吗?

+0

你是什么意思“不消除EdmMetadata工作表中”?如果DropCreateDatabaseIfModelChanges检测到EdmMetadata和基于代码的模式之间存在差异,则它总是删除整个数据库。 – 2012-04-09 11:32:47

回答

3

EdmMetadata在EF 4.3 Code First模型中已经过时,而是使用_MigrationHistory表来检查模型和数据库之间的兼容性。

(注意_MigrationHistory表由系统表,如果可能的。这意味着,要看到它,你可能需要扩大在SQL Management Studio中的“系统表”或您的首选工具。)

在EF 4.3,当DbContext与Code First方法一起使用时,Database.Create尝试使用Code First Migrations来创建数据库并执行DDL。 Database.Create为您执行初始自动迁移。作为此过程的一部分,迁移将创建一个名为_MigrationHistory的表,并在该表中插入一行,其中包含Code First模型的压缩版本。并且DropCreateDatabaseIfModelChanges初始化程序使用Database.CompatibleWithModel方法通过检查_MigrationHistory表来确定Code First模型是否与用于创建数据库的模型相匹配。

http://blog.oneunicorn.com/2012/01/13/ef-4-3-beta-1-what-happened-to-that-edmmetadata-table/

+0

首先感谢您的有用答案,但我已经了解了Migrations和_MgrationHistory表,主要问题是在EF 4.2中我可以插入到DB中的初始记录(在EF 4.3之前,当我更改模型时,我可以插入一些样本通过重写** Seed **方法将记录记录到DB)EF 4.3中的解决方案是什么? – 2012-04-10 04:25:49

+1

您仍然可以在EF 4.2中覆盖CreateDatabaseIfNotExists或DropCreateDatabaseIfModelChanges的Seed方法。但是如果使用DropCreateDatabaseIfModelChanges,您的旧数据将会丢失。要保留EF 4.3中的旧数据,请在Configuration类的Seed方法中使用AddOrUpdate。 – 2012-04-10 10:28:25

相关问题