Dot-Net-Core-3.0

如何在 EF Core 3.0 中使用帶有 SqlParameters 的儲存過程

  • August 31, 2020

我已經嘗試過以下

var p = new SqlParameter("Option", "AUTHENTICATE");
var user = _context.Set<User>().FromSqlRaw("EXECUTE dbo.spGeneral_Authenticate @Option", p).ToList();
var user = _context.Set<User>().FromSqlRaw("EXECUTE dbo.spGeneral_Authenticate @Option=@Option", p).ToList();

SqlParameter[] ps = new SqlParameter[1];
ps[0] = new SqlParameter("Option", "AUTHENTICATE");
var user = _context.Set<User>().FromSqlRaw("EXECUTE dbo.spGeneral_Authenticate @Option", ps).ToList();
var user = _context.Set<User>().FromSqlRaw("EXECUTE dbo.spGeneral_Authenticate @Option=@Option", ps).ToList();

錯誤:

InvalidCastException:SqlParameterCollection 只接受非空 SqlParameter 類型對象,不接受 SqlParameter 對象。

InvalidCastException:SqlParameterCollection 只接受非空 SqlParameter 類型對象,不接受 SqlParameter 對象。

對於上述錯誤,SqlParameter 應該是Microsoft.Data.SqlClient.SqlParameter而不是System.Data.SqlClient.SqlParameter

在 .Net core 3.0 或以上版本,請使用以下程式碼: 而不是 System.Data.SqlClient.SqlParameter 使用 Microsoft.Data.SqlClient.SqlParameter

int AuthourId = 3;
Microsoft.Data.SqlClient.SqlParameter authorId = new Microsoft.Data.SqlClient.SqlParameter("@AuthorId", AuthourId);
IEnumerable<Book> booksByAuthor = shopDbContext.Books
                                               .FromSqlRaw("Select * from Book where AuthorId=@AuthorId", authorId)
                                               .ToList();

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