【发布时间】:2020-09-22 01:29:45
【问题描述】:
我有一个应该通过 id 返回登录的存储过程:
CREATE PROCEDURE MyProcedure
(
@id INT,
@login NVARCHAR(50) OUTPUT
)
AS
BEGIN
SELECT
ID
,
Login
FROM
Users
WHERE
ID = @id
END
GO
在端点中使用此代码可以正常工作:
var id = new SqlParameter
{
ParameterName = "id",
SqlDbType = SqlDbType.Int,
Value = 15,
};
var login = new SqlParameter
{
ParameterName = "login",
SqlDbType = SqlDbType.NVarChar,
Direction = ParameterDirection.Output,
Size = 50,
};
var query = $"EXEC MyProcedure @{id}, @{login} OUTPUT";
var result = _context.Set<User>()
.FromSqlRaw(query, id, login).ToList();
foreach (var item in result) Console.WriteLine(item.Login);
和类:
public class User
{
public string Login { get; set; }
}
和属性:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasNoKey();
}
我得到一个包含一个搜索元素的列表,它的 Login 属性是我想要的。
但是如果我把SELECT改成(原来的程序是这样的,我不能改):
SELECT
@id =
ID
,
@login =
Login
我收到一个错误The required column 'Login' was not present in the results of a 'FromSql' operation.
那么获取Login 的正确方法是什么?
【问题讨论】:
标签: stored-procedures entity-framework-core