【问题标题】:Why does Entity Framework automatically use the ObjectContext instead of the DbContext when mapping database tables using ADO.NET Entity datamodel为什么Entity Framework在使用ADO.NET实体数据模型映射数据库表时会自动使用ObjectContext而不是DbContext
【发布时间】:2012-02-19 16:55:34
【问题描述】:

我首先遵循数据库方法;我已经在我的 SQL Server 2008 数据库中创建了这些表,然后我使用 ADO.NET 实体数据模型将这些表映射到实体框架类。但是当我打开 Designer.cs 文件时,我在自动创建的类定义中发现了以下代码:

public partial class PortalEntities : ObjectContext

所以我有以下三个问题让我感到困惑:

  1. 为什么我的PortalEntities 类派生自ObjectContext 而不是我所期望的DbContext

  2. ObjectContextDbContext 之间是否存在主要区别,或者它们基本相同并提供相同的功能

  3. 当我尝试编写类似于以下代码的内容时:

    Student student = db.Students.Find(id);
    

我发现我不能像以前使用DbContext 那样使用.Find() 方法,那么这是否意味着ObjectContextDbContext 有不同的方法可以使用?

BR

【问题讨论】:

    标签: asp.net asp.net-mvc-3 entity-framework dbcontext objectcontext


    【解决方案1】:

    DbContextObjectContext 的包装,它简化了我们最常做的事情的界面。

    如果您有DbContext,您仍然可以访问ObjectContexttrough ((IObjectContextAdapter)dbContext).ObjectContext;

    如果您想在第一次使用数据库时使用DbContext 而不是ObjectContext,您可以切换用于生成代码的模板。您可以通过右键单击 EDMX 并选择“添加代码生成项”来执行此操作。然后您可以选择 DbContext 模板。

    Here is an example的整个过程。

    【讨论】:

    • 感谢您的回复;但是我会先在我的数据库中使用 DbContext 而不是 ObjectContext 吗?。
    • DbContext 有一个简化的界面。它将更易于使用,如有必要,您始终可以将其转换为 ObjectContext。此外,DbContext 更容易模拟以进行单元测试。
    【解决方案2】:

    自 VS2012 起,默认代码生成从 ObjectContext 更改为 DbContext

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多