为什么在使用ADO.NET Entity数据模型映射数据库表时,Entity Framework会自动使用ObjectContext而不是DbContext

joh*_* Gu 13 asp.net entity-framework objectcontext asp.net-mvc-3 dbcontext

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

public partial class PortalEntities : ObjectContext
Run Code Online (Sandbox Code Playgroud)

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

  1. 为什么我的PortalEntities班级来自ObjectContext而不是DbContext我期望的?

  2. ObjectContext&之间是否存在重大差异DbContext,或者它们主要相同并提供相同的功能

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

    Student student = db.Students.Find(id);
    
    Run Code Online (Sandbox Code Playgroud)

我发现我不能使用.Find(),因为我曾经用做方法DbContext,那么,这是否意味着,ObjectContextDbContext有,我可以用不同的方法?

BR

Wou*_*ort 24

DbContext是一个包装器ObjectContext,简化了我们最常做的事情的界面.

如果你有,DbContext你仍然可以访问ObjectContext低谷 ((IObjectContextAdapter)dbContext).ObjectContext;

如果要先使用DbContext而不是ObjectContext使用数据库,则可以切换用于生成代码的模板.您可以通过右键单击EDMX并选择"添加代码生成项"来执行此操作.然后,您可以选择DbContext模板.

这是整个过程的一个例子.

  • DbContext具有简化的界面.它将更容易使用,如果需要,您可以始终将其强制转换为ObjectContext.此外,DbContext更易于模拟以进行单元测试. (4认同)
  • 更新了链接 (3认同)