Dot-Net-Core-3.0
如何在 EF Core 3.0 中使用帶有 SqlParameters 的儲存過程
我已經嘗試過以下
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();