C# 无法使用存储过程从SQL Server检索数据
我创建了一个连接两个表的存储过程,只需要两个表中的几个字段C# 无法使用存储过程从SQL Server检索数据,c#,entity-framework,C#,Entity Framework,我创建了一个连接两个表的存储过程,只需要两个表中的几个字段 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.Employee
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。只需存储过程即可。您遗漏了一个参数:
var post = new SqlParameter("@postId", postId);
var x = _context.Posts.FromSql("GetViewers @postId", post).ToList();
看起来您需要以不同的方式为存储过程添加参数 请查看下面的文档 对这样的事情:
var param = new SqlParameter("@postId", postId);
var x = _context.Posts.FromSql("GetViewers @postId", param).ToList();
所以问题不在代码中,但实体框架核心显然对存储过程有一些限制
您需要显示一些必填字段-这意味着什么?好的,这取决于错误是什么,您没有提供。两个表都有多个必填字段。联接表所需的sp仅为3。这是我的问题,我如何在不这样做的情况下获得这些值。否决票是怎么回事?你能补充一个错误吗。此外,请尝试直接在mssql中执行此SP。另外,请附上一个带有映射的c#模型。显然,当
发布时,您的过程不会返回post,而是返回employee。FromSql
显然需要post。。。显然修复了使用Empkoyees.FromSql
并返回Employee
所需的所有字段,即使我使用Employees,我仍然会得到相同的错误,因为它会查找相同的必填字段。我有。我只是没有包括在内。请看我的编辑。我已经有了。我只是没有包括在内。请看我的编辑。谢谢。看来存储过程和EF核心有很多限制。结果不能包含相关数据。这意味着存储过程不能执行连接来表示结果。
var param = new SqlParameter("@postId", postId);
var x = _context.Posts.FromSql("GetViewers @postId", param).ToList();