2016-09-21 94 views
0

在初始化DbContext時,Entitiy框架可以過濾實體的數據集嗎?實體框架DbContext與查詢

我有以下問題: 我想從我們的ERP系統的數據庫中讀取生產數據。我們所有的部門都將他們的數據保存在一張表中,該表中有一個數據所屬部門的字段。現在我正在爲一個特定部門開發一款軟件。當然,我可以讀入DbSet的所有數據,然後查詢本部門只是數據集在我的應用程序代碼,就像這樣:

 Dim test As New DB.ModelProd() 
     Dim cl As New List(Of DB.Charge) 
     cl = test.Charges.ToList().Where(Function(ch) ch.Company = 3 And ch.ChargeId IsNot Nothing).ToList() 
     'do something with cl 

但因爲這是隻有一個部門,我不想要的應用程序讀取和觸摸其他我永遠不會使用的數據。另外我想從應用程序中隱藏這些細節,因爲它很容易出錯(在使用它之前忘記過濾數據等)。

那麼,解決這個問題的最好方法是什麼?

最好的問候, 羅納德

+0

您可以將這些細節包裹在您的BL或DAL中。在那裏你可以重寫DbSets或者他們返回的IQueryables。 – DevilSuichiro

+0

其中之一,你必須刪除第一個'.ToList()'。但我想你會喜歡[EntityFramework.DynamicFilters](https://github.com/jcachat/EntityFramework.DynamicFilters)。 –

回答

1

這裏沒有一個「最佳」的方式 - 但這裏有一些選擇:

  • 實現通過存儲過程的所有訪問,需要在每次調用的部門ID
  • 圍繞您的上下文創建一個存儲庫,以生成查詢並添加部門過濾器

使用存儲庫是p可以說是多層次系統中最慣用的方式。使用存儲過程會更安全,因爲您只能授予對過程的訪問權限,並防止任何人直接使用上下文或查詢數據庫而不經過它們,但會使編程變得更加困難(您將無法自由使用Linq查詢數據庫 - 僅通過存儲過程)

+0

向上投票推薦存儲庫。存儲庫模式的實現正是隱藏部門需求所需要的。 – robaudas