【问题标题】:Using DbContext and Database First in EF 4.1在 EF 4.1 中首先使用 DbContext 和数据库
【发布时间】:2012-02-13 16:32:39
【问题描述】:

我已经开始着手一个新项目,并且正在从 LinqToSQL 切换到 EF 4.1 作为我的 ORM。

我已经设置了一个可以使用的数据库,因此我将采用数据库优先的方法。默认情况下,EF 生成一个扩展 ObjectContext 的上下文。我想知道是否有一个好的方法是用DbContext 替换它。

大多数可用示例仅处理 Code First 和 DbContext,但 DBContext 也可以与 Database First 一起使用。使用 DBContext 有什么好处吗?根据我的阅读,DBContext 是 ObjectContext 的简化版本,并且更易于使用。还有其他优点或缺点吗?

【问题讨论】:

    标签: entity-framework orm entity-framework-4 dbcontext objectcontext


    【解决方案1】:

    您不会手动替换任何内容。您将需要 VS Gallery 提供的DbContext T4 Generator。不要触摸自动生成的文件 - 每次修改 EDMX 文件时,您的更改都会丢失。

    我去年回答了similar question。现在我的回答主要是——对于新用户来说,DbContext API 可能更好。 DbContext API 得到了简化——无论是在使用方面还是在功能方面,但您仍然可以从 DbContext 获得 ObjectContext 并使用仅在 ObjectContext API 中可用的功能。另一方面,DbContext API 有一些额外的性能影响和额外的错误层。在简单的项目中,您可能不会发现 DbContext API 有任何缺点 - 您不会看到性能影响,您不会使用仅在 ObjectContext 中可用的角落功能,并且您不会受到偶尔出现的错误的影响。

    自 DbContext API 发布以来收集了大量信息和博客文章,因此您不必担心找不到 API 的描述。 ADO.NET 团队现在也使用 DbContext API 作为他们的旗舰。

    我不是 DbContext API 的忠实拥护者,但我的看法与其功能无关,而是与它的存在有关 - 不需要 ADO.NET 团队拥有两个 API 和拆分开发能力来维护和修复两个 API做同样的事情。这只意味着实现真正的新功能的能力较少。

    【讨论】:

    • 您的链接有帮助。我还想知道,因为我已经创建了所有 POCO 类,我是否可以简单地使用 DbContext 生成器添加两个 T4 模板文件、删除 poco 实体的模板文件并使用我的 POCO 实体而无需做太多工作。
    • 可以,但必须严格按照rules 创建 POCO 实体(命名约定)
    【解决方案2】:

    我现在将它与 Oracle 一起用于现有应用程序的附加功能。 Ladislav 提到的简化对我来说在这个项目上很有效,因为我的时间和资源都很短缺。只要您坚持简单的 CRUD 操作和不到 150 个表,我就没有发现任何问题。

    您仍然可以使用元数据注释来提供基本的验证和本地化,并且那里有足够的文档,但您在 Microsoft 官方网站上找不到太多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多