Sve*_*ang 10 generics datacontext entity-framework
我正在为实体框架编写一个通用存储库,并对这些调用之间的区别感到困惑:
ObjectContext.CreateObjectSet<T>
ObjectContext.CreateQuery<T>
DbContext.Set<T>
Run Code Online (Sandbox Code Playgroud)
我想要一个通用的存储库,它既支持从.edmx文件生成的上下文,也支持代码第一个DbContext,所以我有这个:
public abstract class EntityRepository<TClass>
where TClass : class, new()
{
//private readonly TContext _context;
private readonly ObjectSet<TClass> _objectSet;
protected EntityRepository(IObjectContextAdapter context)
{
_objectSet = context.ObjectContext.CreateObjectSet<TClass>();
}
protected EntityRepository(ObjectContext context)
{
_objectSet = context.CreateObjectSet<TClass>();
}
public ObjectSet<TClass> Query()
{
return _objectSet;
}
}
Run Code Online (Sandbox Code Playgroud)
在我在网上看过的例子中,我看过所有使用过的3个,它们之间的实际差异是什么?一个更好的表现明智吗?我知道你可以使用所有3种方法针对上下文编写LINQ查询.
cin*_*net 16
在CreateObjectSet<T>你的回报ObjectSet<T>这基本上集合T对象,具有添加,删除能力,从...以后导致以插入此集合对象,删除,......你也可以用它来查询.它就像给定实体的顶级根.
该CreateQuery<T>给你ObjectQuery<T>,这可以被看作像IEnumerable<T>(这也是IQueryable<T>).此对象类似于ObjectSet<T>(某些条件等)的子集,但您无法向其中添加项目,依此类推.
最后Set<T>返回的DbSet<T>是Code First的第一个方法/对象的简化版本.例如,更容易使用这些对象(或更好地说接口; IDbSet<T>),即单元测试等.类似于什么ObjectContext和DbContext是.
| 归档时间: |
|
| 查看次数: |
10198 次 |
| 最近记录: |