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