Asp.net

Entity Framework Core - 使用帶有輸出參數的儲存過程

  • November 3, 2021

我正在嘗試將儲存過程與新的 Entity Framework Core 一起使用。我需要盡快開始新項目,它將是 ASP.Net 5,但不確定 Entity Framework 是否適合這項工作。該應用程序將每分鐘觸發幾個儲存過程,我需要輸出參數。EF 會對此有好處還是我應該使用 ADO.Net?

我試過 FromSql 和 database.ExecuteSqlCommand 但沒有運氣。

using (AppDbContext db = factory.Create())
       {
           var in1 = new SqlParameter
           {
               ParameterName = "ParamIn1",
               DbType = System.Data.DbType.Int64,
               Direction = System.Data.ParameterDirection.Input
           };
           var in2 = new SqlParameter
           {
               ParameterName = "ParamIn2",
               DbType = System.Data.DbType.String,
               Direction = System.Data.ParameterDirection.Input
           };
           var out1 = new SqlParameter
           {
               ParameterName = "ParamOut1",
               DbType = System.Data.DbType.Int64,
               Direction = System.Data.ParameterDirection.Output
           };
           var out2 = new SqlParameter
           {
               ParameterName = "ParamOut2",
               DbType = System.Data.DbType.String,
               Direction = System.Data.ParameterDirection.Output
           };

           var result = db.Database.ExecuteSqlCommand("exec spTestSp", in1, in2, out1, out2);
       }

它應該可以工作,但我相信您還需要OUT在命令語句中包含參數名稱和關鍵字

var sql = "exec spTestSp @ParamIn1, @ParamIn2, @ParamOut1 OUT, @ParamOut2 OUT";
var result = db.Database.ExecuteSqlCommand(sql, in1, in2, out1, out2);

var out1Value = (long) out1.Value;
var out2Value = (string) out2.Value;

上面由@Nkosi 和部分由@Whistler 描述的解決方案的完整範例,以方便未來的讀者!

在我的範例中,我試圖執行數據庫中存在的儲存過程以獲取特定路徑。

string tableName = "DocumentStore";
string path;

       var in1 = new SqlParameter
       {
           ParameterName = "TableName",
           Value = tableName,
           Size = Int32.MaxValue,
           DbType = System.Data.DbType.String,
           Direction = System.Data.ParameterDirection.Input
       };

       var out1 = new SqlParameter
       {
           ParameterName = "Path",
           DbType = System.Data.DbType.String,
           Size = Int32.MaxValue,
           Direction = System.Data.ParameterDirection.Output
       };

       //_context is DbContext Object
       _context.Database.ExecuteSqlCommand("EXEC GetFileTableRootPath @TableName, @Path OUT", in1,out1);

       path = out1.Value.ToString();

引用自:https://stackoverflow.com/questions/45252959