带有查询的实体框架DbContext

时间:2016-09-21 13:53:28

标签: .net entity-framework dbcontext

在初始化DbContext时,Entitiy框架是否有可能过滤实体的数据集?

我有以下问题: 我想从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

但由于这只是一个部门的应用程序,我不想阅读和触摸其他人从未使用过的数据。另外我想隐藏应用程序中的这个细节,因为它容易出错(忘记在使用之前过滤数据等)。

那么,解决这个问题的最佳方法是什么?

最诚挚的问候, 罗纳德

2 个答案:

答案 0 :(得分:1)

不是"最好的"方式 - 但这里有一些选择:

  • 通过存储过程实现所有访问,每次调用都需要部门ID
  • 围绕上下文创建一个存储库,用于生成查询并添加部门过滤器

使用存储库可能是多层系统中最惯用的方式。使用存储过程会更安全,因为您只能授予对过程的访问权限并阻止任何人直接使用上下文或查询数据库而不通过它们,但它会使编程更难(您无法使用Linq自由地查询数据库 - 只能通过存储过程)

答案 1 :(得分:0)

实施IDbCommandTreeInterceptor并更改EF生成的DbCommandTree。您可以在以下blog post中找到有关实际步骤的更多详细信息。