EF Code First 4.3的DbContext生命周期是什么?

5
我搜索了这个主题,但并没有找到太多信息。有人看过DBContext的简洁“操作顺序”,包括实例化、验证、保存等吗?我主要是好奇,因为在使用LINQPad和我的EF4.3 Code First上下文时,它运行了两个查询,然后才运行我的任何查询。其中一个与迁移历史有关,我理解这是因为我们使用了EF Migrations,它试图查看是否需要自动更新,另一个查询是针对EdmMetadata表的,我不明白为什么会这样,因为如果我们使用EFMigrations的话,听起来这是不必要的。

我对为什么会调用这个查询的缺乏理解让我想知道DBContext生命周期的其他部分可能是我不知道的,而了解/覆盖它们可能是有用的。谢谢!


这里提供一些信息:http://blog.oneunicorn.com/2012/01/13/ef-4-3-beta-1-what-happened-to-that-edmmetadata-table/,EF 4.3具有使用EdmMetadata进行模型兼容性测试的功能-尽管如你所说,如果您正在使用迁移,则可能根本不应使用它。但我更好奇的是,您是如何让Linqpad与EF 4.3配合工作的...当我尝试打开我的上下文程序集时,会出现“无法加载EntityFramework 4.1”错误:( - Leo
我认为它只在LINQPad的最新测试版中有效。 - Ocelot20
我觉得我正在使用的就是4.38.03版本...只是为了确保一下,你是用EntityFramework 4.3.0.0来编译你的项目吗? - Leo
哦,你选择了哪个LINQPad驱动程序?我正在使用EF DBContext POCO(4.1 / 4.2),它运行良好。 - Ocelot20
我正在选择“Entity Framework DbContext POCO (4.1/4.2)”也有可能还有其他问题,我会检查一下,感谢你的帮助 :) - Leo
1
将连接字符串放入虚拟的web.config文件中,使连接字符串成为web.config文件中唯一的项目。我就是这样在Linqpad中成功使用EF 4.3的。 - peterorum
1个回答

0

查询EdmMetadata是为了兼容性考虑。EF 4.1没有迁移功能。为了能够确定模型是否更改,使用了EdmMetadata表。假设您使用EF 4.1应用程序开发了一个应用程序,然后您转移到EF 4.3,但您没有更改模型。在这种情况下,无需运行迁移、抛出异常或触摸数据库,因为您的模型没有更改。对EdmMetadata表的调用只是为了能够优雅地处理此情况,并避免在不需要时抛出或触摸数据库。 我认为在EF 4.3中没有其他类似的更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接