我需要我的实现IObjectSet<T>
能够像“真正的”Linq2Entity 提供者那样验证表达式。是否可以?
背景:
我已将我的 EF 模型(模型优先)更改为 returnIObjectSet<T>
而不是ObjectSet<T>
这样我就可以伪造我的模型,并让它返回我想要的数据。
问题:
我已经编写了一个实现,IObejctSet<T>
它实际上是一个List<T>
.
这一切都很好 -但是当我IObjectSet<T>
使用 LinqToObject 查询我的 im 实现时 - 所以不能保证我有有效的 Linq2Entity 表达式。
建议的解决方案:
使用真实的在我的实现中,我只使用了List<T>
提供者:
private class IObjectSetUnitTestImplementation<T> : IObjectSet<T> where T : EntityObject
{
private IQueryable _qry;
public IObjectSetUnitTestImplementation(List<T> lst)
{
_inner = lst;
_qry = _inner.AsQueryable();
Expression = _qry.Expression;
ElementType = _qry.ElementType;
Provider = _qry.Provider; //<--should be ObjectSet<T>'s provider
}
//Rest of implementaion omitted
}
所以我尝试了这个:
ObjectContext context = null;
var _qry = new ObjectQuery<T>(typeof(T).Name, context) as IQueryable;
Expression = _qry.Expression;
ElementType = _qry.ElementType;
Provider = _qry.Provider;
但是我没有上下文可以提供它,即使我有,它也会尝试访问数据库。
还有其他方法吗?