Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么实体框架在使用ADO.NET实体数据模型映射数据库表时会自动使用ObjectContext而不是DbContext_Asp.net_Asp.net Mvc 3_Entity Framework_Dbcontext_Objectcontext - Fatal编程技术网

Asp.net 为什么实体框架在使用ADO.NET实体数据模型映射数据库表时会自动使用ObjectContext而不是DbContext

Asp.net 为什么实体框架在使用ADO.NET实体数据模型映射数据库表时会自动使用ObjectContext而不是DbContext,asp.net,asp.net-mvc-3,entity-framework,dbcontext,objectcontext,Asp.net,Asp.net Mvc 3,Entity Framework,Dbcontext,Objectcontext,我首先遵循数据库方法;我在SQL Server 2008数据库中创建了这些表,然后使用ADO.NET实体数据模型将这些表映射到实体框架类。但是当我打开designer.cs文件时,我在自动创建的类定义中发现了以下代码: public partial class PortalEntities : ObjectContext 因此,我有以下三个问题让我感到困惑: 为什么我的PortalEntities类是从ObjectContext派生的,而不是像我预期的那样从DbContext派生的 Objec

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

public partial class PortalEntities : ObjectContext
因此,我有以下三个问题让我感到困惑:

  • 为什么我的
    PortalEntities
    类是从
    ObjectContext
    派生的,而不是像我预期的那样从
    DbContext
    派生的

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

  • 当我尝试编写类似于以下代码的代码时:

    Student student = db.Students.Find(id);
    
  • 我发现我不能像以前使用
    DbContext
    那样使用
    .Find()
    方法,那么这是否意味着
    ObjectContext
    DbContext
    有不同的方法可以使用


    BR

    DbContext是
    ObjectContext
    的包装器,它简化了我们最常做的事情的接口

    如果您有
    DbContext
    ,您仍然可以通过
    ((IObjectContextAdapter)DbContext)访问
    ObjectContext

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


    从VS2012开始,默认代码生成从
    ObjectContext
    更改为
    DbContext
    ,谢谢您的回复;但是,首先在数据库apprach中使用DbContext而不是ObjectContext会对我有好处吗?DbContext有一个简化的接口。它将更易于使用,如果需要,您可以始终将其强制转换为ObjectContext。此外,出于单元测试的目的,DbContext更易于模拟。