0

有谁知道如何永久限制 EntityFramework 的结果集?我说的是这样的Conditional Mapping。这正是我想要实现的目标,但有一个例外:我想以编程方式执行此操作。这是因为条件值只会在上下文创建时传递给 EF。此外,我不希望此列从映射中消失。

我知道如何使用 EF2.0 和反射来实现这一点。我正在使用CreateQuery()方法来生成我自己的ObjectQuery. CreateQuery()允许使用附加条件注入我自己的 ESQL 查询,例如WHERE TABLE.ClientID == value.

EF40 的问题是没有更多,ObjectQuery只有没有使用。我不知道如何注入我自己的 ESQL 查询。ObjectSetCreateQuery()

我想限制结果集的原因是我想将客户端数据彼此分开。这种分离应该在上下文中自动完成,这样程序员就不必.Where(x => x.ClientID == 5)为每个单独的查询添加条件。

也许我的方法完全不好——但我不知道有什么替代方法。

4

1 回答 1

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);
    }
  }
}
于 2010-11-23T14:59:22.453 回答