为什么不返回输出值?
使用EF Core 2 (2.1.0-preview-final)作为通过代码优先建模管理模式的平台,我想添加其他数据库对象,如SP。这本身就是一段旅程,然而此处主题下的挑战是使用context.Database.ExecuteSqlCommandAsync()执行SP并检索输出参数值。
这是成功执行SP的代码,但是从不返回输出值。您可能认为设置参数的方向就足够了。
public async Task AddAsync(Models.Filename entity)
{
SqlParameter name = new SqlParameter("@Name", entity.Name);
SqlParameter idOut = new SqlParameter
{
ParameterName = "@Id",
SqlDbType = System.Data.SqlDbType.BigInt,
Direction = System.Data.ParameterDirection.Output
};
using (var db = new MetaDataDbContext())
{
await db.Database.ExecuteSqlCommandAsync("[dbo].[AddFilename] @Name, @Id", name, idOut);
}
entity.Id = Convert.ToInt64(idOut.Value);
}
发布于 2018-03-02 21:52:14
要解决这个问题,只需将T-SQL语句更改为"[dbo].[AddFilename] @Name, @Id OUTPUT"
EF6 - ExecuteSqlCommandAsync - Get return parameter (declare scalar variable error)看起来很有希望,但是它遗漏了一个关键部分,即T-SQL部分必须包含目标参数的OUTPUT关键字。
事后看来,Why does EF Core always return -1 with this stored procedure?提供了解决方案,但它的名称(标题)并没有出现在我的搜索结果中。
哈!
https://stackoverflow.com/questions/49077947
复制相似问题