实体框架中的'ObjectContext'与'DbContext'

时间:2012-02-07 13:19:46

标签: .net entity-framework dbcontext objectcontext

我正在使用基于Generic Repositories和Unit of Work设计模式创建的代码中的DbContext类。 (我遵循指南here。)在处理这个项目时,我遇到了ObjectContext类。

我已阅读了很多讨论 ObjectContextDbContext 的帖子。虽然我读过的一些内容是有道理的,但我仍然没有完全理解这些差异,这使我对我当前的实现感到疑惑。我应该使用DbContextObjectContext还是两者兼而有之?使用其中一种现在被认为是一种反模式吗?

3 个答案:

答案 0 :(得分:21)

DbContext只是ObjectContext的包装。

DbContext只是一组比ObjectContext公开的API更易于使用的API。

无论如何,here你会找到一个使用存储库模式和实体框架的非常简单的Visual Studio模板。

答案 1 :(得分:-1)

我们可以转换DBContext来键入ObjectContext

public class MyContext: DbContext
{
    public DbSet<Blog> Blogs { get; set; }
   //other dbsets, ctor etc.

    public ObjectContext ObjectContext()
    {
        return (this as IObjectContextAdapter).ObjectContext;
    }
}

答案 2 :(得分:-1)

来自ObjectContext VS DBContext.

Dbcontext可以定义为ObjectContext的轻量级版本,或者我们可以说Dbcontext是ObjectContext的包装器,并且只公开编程中真正需要的常用功能。 我们还可以从DbContext获取对ObjectContext的引用,以使用ObjectContext中仅支持的那些功能。

以下代码可以帮助从现有的DbContext对象获取ObjectContext对象。

public class EntityDBContext: DbContext, IObjectContextAdapter
{
   ObjectContext IObjectContextAdapter.ObjectContext
   {
        get
        {
              var objectContext = (this as IObjectContextAdapter)
              if(objectContext != null)
                return (this as IObjectContextAdapter).ObjectContext;
              else
                return null;
        }
   }
}

最后,DbContext不是ObjectContext的替代品,但它是构建在ObjectContext上的简单替代方案。