我完全困惑於如何使用實體框架核心使用存儲過程。如果存儲過程返回一個匿名類型,我該如何檢索數據?如果返回類型不是匿名的,我該怎麼辦?我如何添加輸入/輸出參數?實體框架核心,存儲過程
我在問這些問題,因爲無論我看,我都會得到不同的答案。我猜EF英孚正在迅速發展,微軟正在涉足很多想法。
我完全困惑於如何使用實體框架核心使用存儲過程。如果存儲過程返回一個匿名類型,我該如何檢索數據?如果返回類型不是匿名的,我該怎麼辦?我如何添加輸入/輸出參數?實體框架核心,存儲過程
我在問這些問題,因爲無論我看,我都會得到不同的答案。我猜EF英孚正在迅速發展,微軟正在涉足很多想法。
如何添加輸入/輸出參數?
我要回答你的這個特定問題。
下面是兩個輸入和兩個輸出參數的T-SQL存儲過程
CREATE PROCEDURE [dbo].[yourstoredprocedure]
-- Add the parameters for the stored procedure here
@varone bigint
,@vartwo Date
,@varthree double precision OUTPUT
,@varfour bigint OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- YOUR CODE HERE
SET @varthree = 10.02;
SET @varfour = @varone;
return;
END
現在要執行使用實體框架的核心
MyContext.Database
.ExecuteSqlCommand(@"EXECUTE [yourstoredprocedure] " +
" {0} " +
", {1} " +
",@varthree OUTPUT " +
", @varfour OUTPUT ", dataOne, dataTwo, outputVarOne, outputVarTwo);
var outputResultOne= outputVarOne.Value as double?;
var outputResultTwo= outputVarTwo.Value as long?;
你可以通過你輸入這個存儲過程簡單地使用參數化查詢如上。您也可以創建命名參數。如對於輸出參數,我創建了兩個命名參數 -
var outputVarOne = new SqlParameter
{
ParameterName = "@varthree ",
DbType = System.Data.DbType.Double,
Direction = System.Data.ParameterDirection.Output
};
var outputVarTwo = new SqlParameter
{
ParameterName = "@varfour ",
DbType = System.Data.DbType.Int64,
Direction = System.Data.ParameterDirection.Output
};
,這是如何使用EF核心您執行與輸入和輸出參數的存儲過程。希望這可以幫助某人。
該解決方案提供調用存儲過程並將返回值映射到已定義(非模型)實體的方法。 https://github.com/verdie-g/StoredProcedureDotNetCore
Microsoft解決了此問題: 「SQL查詢只能用於返回屬於您模型一部分的實體類型。我們的待辦事項有一個增強功能,可以從原始SQL查詢中返回即席類型。 https://docs.microsoft.com/en-us/ef/core/querying/raw-sql
這裏是在GitHub上跟蹤的問題:https://github.com/aspnet/EntityFramework/issues/1862
@downvoter如果你downvote時解釋到,如果有什麼我做錯了,我想知道和糾正自己我會很感激。如果downvote沒有解釋,我永遠不會知道我在這裏做錯了什麼。 – Dhananjay