2016-09-21 184 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