有没有人知道如何永久限制EntityFramework的结果集?我说的是这样的Conditional Mapping。这正是我想要实现的一个例外:我想以编程方式执行此操作。这是因为条件值仅在上下文创建时传递给EF。除此之外,我不希望此列从映射中消失。
我知道如何使用EF2.0和反射实现这一目标。我使用CreateQuery()
方法生成自己的ObjectQuery
。 CreateQuery()
允许使用附加条件注入我自己的ESQL查询,例如WHERE TABLE.ClientID == value
。
EF40的问题是不再有ObjectQuery
但仅使用ObjectSet
和CreateQuery()
。我不知道如何注入我自己的ESQL查询。
我想限制结果集的原因是我想将客户端数据彼此分开。这种分离应该在上下文中自动完成,这样程序员就不必为每个单独的查询添加条件.Where(x => x.ClientID == 5)
。
也许我的做法非常糟糕 - 但我不知道其他选择。
答案 0 :(得分:1)
你不需要反思。您可以简单地使用从ObjectContext继承的类或创建UnitOfWork和Repositories的自定义实现,它将以更好的方式包装此功能(上层只能访问不暴露EF上下文的UnitOfWork和Repositories)。
对象上下文的简单示例:
public class CustomContext : ObjectContext
{
private ObjectSet<MyObject> _myObjectsSet;
private int _clientId;
public CustomContext(string connectionString, int clientId)
: base(connectionString)
{
_myObjectSet = CreateObjectSet<MyObject>();
_clientId = clientId;
}
public IQueryable<MyObject> MyObjectQuery
{
get
{
return _myObjectsSet.Where(o => o.ClientId == _clientId);
}
}
}