【发布时间】:2016-05-11 15:08:10
【问题描述】:
我有一个包含多个表和一些存储过程的数据库,这些存储过程查询是否要从各种表中获取特定数据以显示所需的信息。 在下面找到一个存储过程的示例:
SELECT DISTINCT
ROW_NUMBER() OVER (ORDER BY dbo.[table1].ReportedDate DESC) AS rowNumber,
dbo.[table1].[id],
dbo.[table1].caseReference,
dbo.[table2].organisationName AS customerName,
dbo.[table3].assetRegistration,
dbo.[table4].surname
FROM dbo.[table1] WITH (NOLOCK)
LEFT JOIN dbo.[table2] with (NOLOCK)
ON dbo.[table2].JobId = dbo.[table1].[id]
LEFT JOIN dbo.[table3] WITH (NOLOCK)
ON dbo.[table3].id = dbo.[table2].[JobServiceId]
LEFT JOIN dbo.[table4] WITH (NOLOCK)
ON dbo.[table4].[jobID] = dbo.[table1].[id]
WHERE (table1.caseReference LIKE @caseReference+'%')
我想从使用此类存储过程转移到使用实体框架的更多基于代码的方法。如何在映射到数据库的 dbContext 类上使用 Linq 查询重新创建类似于上述查询的查询?
我在弄清楚如何选择要从每个表返回的数据以及如何将它们放在一起时遇到问题。
【问题讨论】:
-
为了获得最佳性能和将来易于维护,我更喜欢使用存储过程来处理复杂的逻辑
-
我倾向于采取让 EF 为我编写 SQL(基本 ORM 使用场景)的方法,但是当它生成的 SQL 效率低下时,我会创建自己的存储过程。您上面的示例将是我将在 EF 生成的 SQL 上使用存储过程的示例。
-
@techspider 关于性能,这将提供更好的结果,使用实体框架进行此类查询或存储过程,请记住,上面的示例是正在使用的示例的缩减版本
-
@RazvanGoia 你能试试我的回答吗?
-
@RazvanGoia 有很多文章区分 EF 或 SP 的用法。例如看到这个stackoverflow.com/questions/14530/…。一药不能治百病!!写代码没那么重要;考虑安全性、可维护性和易于支持。
标签: c# entity-framework linq