具有读存储过程的实体框架

本文关键字:实体 框架 存储过程 | 更新日期: 2023-09-27 18:08:28

我在一个项目中使用EF 6,我是EF的新手。对于这个特定的项目,我们尽可能地使用了现有的数据库和存储过程。我有一个存储过程,它引入了比模型更多的数据列。我们已经解决了使用该存储过程的问题,但是现在它返回的数据又被请求了。我不确定最好的方法来实现这一点,所以我转向这里寻求帮助。

这是我的存储过程:

CREATE Procedure dbo.procGetMainInvoices
  @Division CHAR(5),
  @CustNum  CHAR(6)
AS
SELECT  i.InvoiceNumber,
        i.Division,
        i.CustomerNumber,
        i.InvoiceType,
        i.InvoiceDate,
        i.DueDate,
        i.AmountDue,
        (SELECT COUNT(trn.InvoiceNumber)
         FROM   Invoice trn
         WHERE  trn.InvoiceNumber = i.InvoiceNumber
         AND    trn.Division = i.Division
         AND    trn.CustomerNumber = i.CustomerNumber) as TransactionCount
FROM    Invoice i
WHERE   i.Division = @Division
AND     i.CustomerNumber = @CustNum
AND     i.InvoiceStatus = 'O'
AND     i.ItemSequence = 0
AND     i.ItemLine = 0
ORDER BY i.InvoiceDate,
         i.InvoiceNumber

可以看到,选择的最后一列是一个计数。我需要将这些数据添加到我现有的发票模型中。我需要高效地完成它,因为我可以一次读取数百或数千条记录。

具有读存储过程的实体框架

我通过将存储过程转换为视图来实现这一点。然后将我的DBContext绑定到视图。我必须创建一个包含视图中的字段的新模型,但它确实为我提供了所需的灵活性,使我能够像过滤存储过程那样过滤结果。