我正在使用基于Generic Repositories和Unit of Work设计模式创建的代码中的DbContext
类。 (我遵循指南here。)在处理这个项目时,我遇到了ObjectContext
类。
我已阅读了很多讨论 ObjectContext
与DbContext
的帖子。虽然我读过的一些内容是有道理的,但我仍然没有完全理解这些差异,这使我对我当前的实现感到疑惑。我应该使用DbContext
,ObjectContext
还是两者兼而有之?使用其中一种现在被认为是一种反模式吗?
答案 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)
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上的简单替代方案。