2012-11-07 68 views
1

我正在使用EF 4構建多租戶應用程序,我有一個共享數據庫,許多實體都有一個CustomerID字段。我想知道是否有一種方法可以從我的DBContext中強制執行我的DBSet級別的CustomerID查詢。將DBSet限制爲實體的子集

我希望我可以指定一個CustomerID當我創建我的數據庫上下文,幷包裝DBSets始終包含一個(x => x.CustomerID == custID),所以我不需要擔心添加此邏輯所有在我的應用程序,但我一直沒能找到任何暗示其可能

非常感謝

回答

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將無法進行進一步修改,以包括其他客戶的實體。

+0

感謝Brice,我可能會考慮按照您的建議在服務層中實現此邏輯。 – Callum