如何在 EF Core 3.0 中使用带有 SqlParameters 的存储过程

How to use stored procedures with SqlParameters in EF Core 3.0

我试过下面的方法

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: The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.

InvalidCastException: The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.

如上错误,SqlParameter应该是Microsoft.Data.SqlClient.SqlParameter not 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();