如何在EF Core 3.0中将存储过程与SqlParameters一起使用

时间:2019-09-28 12:08:41

标签: .net-core-3.0 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:SqlParameterCollection仅接受非null   SqlParameter类型对象,而不是SqlParameter对象。

2 个答案:

答案 0 :(得分:5)

  

InvalidCastException:SqlParameterCollection仅接受非null   SqlParameter类型对象,而不是SqlParameter对象。

对于上述错误,SqlParameter应该为Microsoft.Data.SqlClient.SqlParameter而非System.Data.SqlClient.SqlParameter

答案 1 :(得分:0)

在.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();