我有一個使用實體框架(代碼優先)管理的SQL Server後端的WebAPI服務。我已經使用Linq查詢從數據庫中檢索數據。由於我的一些API端點執行多個連接來獲取數據,因此在部署到生產環境中時我觀察到了一些延遲。我閱讀了使用ORM映射與直接SQL查詢(存儲過程),並得出結論,對於複雜查詢,使用存儲過程是最佳選擇。從Entity Framework中的存儲過程返回最終結果
我碰到一些文章來解釋如何從存儲過程中使用類似的代碼返回值:
context.Database.SqlQuery<T>(...)
但是,與簡單SELECT
查詢例子交易,是的,我還隔着返回多個SELECT
查詢結果出來太。但在這種情況下,這是2 SELECT
查詢。
在實際情況中,由於可能涉及連接和其他代碼,因此可能會有2個以上的選擇查詢。而且,在查詢結束時,我們只會推斷最後的SELECT
查詢,它將返回預期的數據。下面是一個示例實體模型的代碼來解釋場景:
// Inside my stored procedure
Declare @XId uniqueidentifier
Declare @YId uniqueidentifier
// Some mockup queries. This can have JOINS and other complex codes in real code.
// Below code is made as simple as possible to explain the scenario
Select @XId=Id From Table1 Where Name = 'Name1'
Select @YId=Id From Table2 Where Code = 'Code1'
// This is the data, I am interested
Select * From Table3 Where [email protected] And [email protected]
我怎樣才能從去年SELECT
查詢行實現這一目標?
我做了一些研究,並且認爲使用EF是不可能的,因爲存儲過程支持是最小的。有可能在EF範圍內做,或者我需要回到ADO.NET嗎?
任何幫助將不勝感激。
謝謝。
@GertArnold - 我已經添加示例代碼段解釋的情況。 – abhilashca
我想你應該用'選擇'你的實際列列表'來替換'選擇*',這樣你才能真正知道你在做什麼。然後創建一個類型爲'MyResultType'的whos屬性來匹配選定的列並調用'context.Database.SqlQuery(...)'。 –
grek40
是的,我已經嘗試過,但它是鑄造到'Table1DTO'而不是'Table3DTO'當然會拋出鑄造錯誤。 – abhilashca