在自己嘗試去寫 Entity Framework 時,也以目前工作的專案現況作為研究方向,剛好在專案的預存程序有用到輸出參數,所以研究了一下在 EF 的框架下如何設定。
CREATE PROCEDURE [dbo].[SimpleProcedure]
@Message nvarchar(max) OUTPUT,
@Nubmer int OUTPUT
AS
BEGIN
SET @Message = 'This is output messgae'
SET @Nubmer = 50
END
各別使用以下作法來執行預存程序,並取得輸出參數。
在 EntityFramework 設定完成後,預存程序會建立成 Entity 類別中的方法,並且傳入的參數就是預存程序的參數。
public virtual int SimpleProcedure(ObjectParameter message, ObjectParameter number)
使用預存程序方法來操作的程式碼如下
using (SimpleDBEntities context = new SimpleDBEntities())
{
ObjectParameter message = new ObjectParameter("Message", typeof(string));
ObjectParameter number = new ObjectParameter("Number", typeof(int));
context.SimpleProcedure(message, number);
Console.WriteLine(message.Value);
Console.WriteLine(number.Value);
}
上述程式重點整理:
EntityFramework 框架依然有支援直接執行 TSQL 指令的用法,程式如下
using (SimpleDBEntities context = new SimpleDBEntities())
{
SqlParameter message = new SqlParameter();
message.ParameterName = "Message";
message.Direction = System.Data.ParameterDirection.Output;
message.Size = -1;
SqlParameter number = new SqlParameter();
number.Direction = System.Data.ParameterDirection.Output;
number.ParameterName = "Number";
number.SqlDbType = System.Data.SqlDbType.Int;
context.Database.ExecuteSqlCommand("EXEC SimpleProcedure @Message OUTPUT,@Number OUTPUT", message, number);
Console.WriteLine(message.Value.ToString());
Console.WriteLine(number.Value.ToString());
}
上述程式重點說明:
SqlParameter.Size
設為-1SqlParameter.Value.ToString()
取得輸出參數值Entity Framework