1

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

我希望我可以在创建数据库上下文时指定一个 CustomerID,并将 DBSet 包装为始终包含一个 (x => x.CustomerID == custID) 所以我不必担心在我的应用程序中添加这个逻辑,但我找不到任何暗示它可能的东西

非常感谢

4

1 回答 1

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 返回的查询不会被进一步修改以包含其他客户的实体。

于 2012-11-07T23:22:17.880 回答