Asp.net
Entity Framework Core - 使用帶有輸出參數的儲存過程
我正在嘗試將儲存過程與新的 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();