将DBSet限制为实体的子集

时间:2012-11-07 12:04:30

标签: entity-framework

我正在使用EF 4构建一个多租户应用程序,我有一个共享数据库,许多实体都有一个CustomerID字段。我想知道是否有一种方法可以在我的DBSet级别从我的DBContext强制执行CustomerID查询。

我希望在创建数据库上下文时可以指定一个CustomerID,并将DBSets包装成总是包含一个(x => x.CustomerID == custID),所以我不需要担心添加这个逻辑在我的应用程序中,但我找不到任何暗示其可能的内容

非常感谢

1 个答案:

答案 0 :(得分:1)

强烈建议在DbContext上的单独的服务层执行此操作,因为在该级别强制执行会更容易。

如果您坚持在DbContext级别执行此操作,则可以使用此示例执行您想要的操作。

class MyContext : DbContext
{
    private readonly int _customerId;

    public MyContext(int customerId)
    {
        _customerId = customerId;
    }

    public DbQuery<MyEntity> MyEntities
    {
        get
        {
            return (DbQuery)Set<MyEntity>().Where(e => e.CustomerId == _customerId);
        }
    }

    protected override OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyEntity>();
    }
}

这个问题的一大问题是,您无法确保从MyEntities返回的查询不会被进一步修改为包含其他客户的实体。