我创建了一个存储过程,该过程连接了2个表,并且只需要两个表中的几个字段。
ALTER PROC GetViewers
@postId int
AS
BEGIN
SELECT e.Email, e.ImagePath, CONCAT(e.FirstName, ' ', e.MiddleName, ' ', e.SurName) AS 'FullName'
FROM Posts as p
JOIN Employees as e
ON p.AuthorId = e.EmployeeId
WHERE p.Id = @postId
END
我正在使用一个注入的实体框架核心,以便更新,创建以及使用这种语法所需的所有内容。
用于员工表
var results = _context.Empkoyees.toListAsync();
var posts = _context.Posts.ToListAsync();
,此结果和帖子为我提供了员工和帖子的所有属性。但是,如果我使用使用此
的存储过程var postId = new SqlParameter("@postId", id);
var x = _context.Posts.FromSql("GetViewers @postId", postId).ToList();
我收到一个错误,提示我某些必填字段不存在。我不想使用linq。请只是存储过程。
答案 0 :(得分:0)
您错过了一个参数:
var post = new SqlParameter("@postId", postId);
var x = _context.Posts.FromSql("GetViewers @postId", post).ToList();
答案 1 :(得分:0)
似乎您需要以其他方式为存储过程添加参数。
看看下面的文档 https://www.entityframeworktutorial.net/efcore/working-with-stored-procedure-in-ef-core.aspx
var x = _context.Posts.FromSql("GetViewers @postId", postId).ToList();
对于这样的事情:
var param = new SqlParameter("@postId", postId);
var x = _context.Posts.FromSql("GetViewers @postId", param).ToList();
所以问题不在代码中,但显然Entity Framework Core在存储过程方面有一些限制