2

我们有一个 ASP.Net 应用程序,它是使用 .Net 4.0 的一部分的 Entity Framework 4.0 构建的。在阅读了许多关于新特性的文章,最重要的是,4.1、4.2 和 4.3 生成的更简洁的 SQL 之后,我们决定借此机会升级我们的应用程序以使用 4.3.1。

我使用 NuGet 将 4.3.1 安装到应用程序中,它成功安装了 EntityFramework.dll;它添加了对它的引用,当我构建时,它被添加到 bin 文件夹中。在运行时,一切都运行良好,但是查看 SQL 分析器并使用 Hibernatine Rhinos 的 Entity Framework Profiler,SQL 似乎是相同的。

由于 NuGet 所做的唯一事情是添加一个引用,我假设我需要做一些其他事情来强制应用程序在运行时使用 4.3.1,但我无法找出我必须做什么。

我很欣赏 SQL 对于正在运行的查询可能是相同的,并且仅查看生成的 SQL 可能不会显示任何差异,但我希望能够确认新版本确实在运行时使用。

我是否需要在 web.config 中添加其他内容以确保使用 4.3.1 或者我所做的是否足够?当然,我需要在某处进行更改,以便让 System.Data.Entity 之类的东西来自新的 EntityFramework.dll 而不是标准的 .Net4.0 库。

感激地收到任何帮助。斯特

4

2 回答 2

6

这是对meetjaydeep步骤答案的重申。感谢他和dpblog,我从那里获得了大部分信息。

按照此处所述安装 EF 4.3.1 。

安装 EF 4.3.1
请注意,在进行升级之前,这将暂时破坏您的代码。所以我建议在继续之前做一个备份。

  1. 如果尚未安装 NuGet,请安装它。
  2. 打开 NuGet 包管理器控制台(VS2010 菜单栏 > 工具 > 库包管理器)
  3. 加载完成后执行此命令,请确保从下拉菜单中选择正确的项目,然后再按 Enter:Install-Package EntityFramework -Version 4.3.1

按照此处所述将 EF 4.0 升级到 EF 4.3.1 (我将直接跳到第 4 步)。

从 EF 4.0 升级到 EF 4.3.1
请注意 - 仅仅因为您安装了 EF 4.3.1,并不意味着您已经完成。您刚刚所做的只是给自己一个使用新模板的选项(根据我自己这样做后所看到的)。现在是时候使用这些新模板了。

  1. 打开您的 EDMX 设计视图。
  2. 在设计表面上;右键 > 添加代码生成项
  3. 从左侧菜单中选择“在线模板”
  4. 搜索“DbContext”
  5. 从列表中选择“EF 4.x DbContext Generator”
  6. 将此项目的名称与您的 EDMX 名称不同。“_____Model.tt”(填空)。我使用了 ___DBCModel.tt - 示例:FooDBCModel.tt
  7. 点击“添加”</li>
  8. 验证是否已创建两个文件:例如 FooDBCModel.tt 和 FooDBCModel.Context.tt。

修复您现在稍微损坏的代码
您的代码现在无法编译 - 不要绝望 - 那是因为您刚刚所做的是将 System.Data.Objects.ObjectContext 替换为新的和改进的(无论如何对我而言)System.Data。 Entity.DbContext (Yaaaaay...)

  • 您需要更新所有 CUD(创建、更新、删除)方法。
  • 而不是使用 context.AddToEntityNameHere(...) 使用 context.EntityNameHere.Add(...)
  • 示例:context.AddToProducts(product) > context.Products.Add(product)
  • 您现在可以访问数据库属性
  • 您现在可以访问 Entry(...) 方法。
  • 您现在可以明确说明在更新期间要更新哪些属性 (context.SaveChanges())。感兴趣的?看这里

在我看来,额外的工作是完全值得的。EF 4.0 的局限性太大了。EF 4.3.1 更加灵活,我喜欢它提供的语法糖。我确信 EF 5.0 会更好,但我现在无法实现飞跃。

享受。

于 2012-10-19T17:58:33.363 回答
2

要使 EF4.3.1 可用,您应该首先安装 EF4.1 update1 并使用最新的 NuGet。

EF4.0 是数据库优先或模型优先,如果要升级到 EF4.3,最简单的方法是使用“代码生成器”:http: //blogs.msdn.com/b/adonet/archive/2011/09/ 28/ef-4-2-model-amp-database-first-walkthrough.aspx

于 2012-05-24T11:42:22.977 回答