我正在使用 EF 4 构建多租户应用程序,我有一个共享数据库,许多实体都有一个 CustomerID 字段。我想知道是否有一种方法可以从我的 DBContext 在我的 DBSet 级别强制执行 CustomerID 查询。
我希望我可以在创建数据库上下文时指定一个 CustomerID,并将 DBSet 包装为始终包含一个 (x => x.CustomerID == custID) 所以我不必担心在我的应用程序中添加这个逻辑,但我找不到任何暗示它可能的东西
非常感谢
我正在使用 EF 4 构建多租户应用程序,我有一个共享数据库,许多实体都有一个 CustomerID 字段。我想知道是否有一种方法可以从我的 DBContext 在我的 DBSet 级别强制执行 CustomerID 查询。
我希望我可以在创建数据库上下文时指定一个 CustomerID,并将 DBSet 包装为始终包含一个 (x => x.CustomerID == custID) 所以我不必担心在我的应用程序中添加这个逻辑,但我找不到任何暗示它可能的东西
非常感谢
我强烈建议在您的 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 返回的查询不会被进一步修改以包含其他客户的实体。