实体框架核心 - FromSql 错误:

Din*_*UUp 2 entity-framework entity-framework-core

所以我试图使用 Entity Framework Core 来调用存储过程并将一些行返回到对象中。

遵循我正在使用的解决方案中的示例,我已准备好所有内容,但无法正常调用存储过程或将结果映射回。

这是来自一段代码:

var list = this.context.DocumentList.FromSql<Document>("EXECUTE spSelDocsList @_iUserNumber", new { @_iUserNumber = UserId }).ToList();

返回错误:

“无法为 CLR 类型 '<>f__AnonymousType23' 找到到关系类型的映射。”

Din*_*UUp 5

在更多地搜索此错误并尝试确定返回它的原因后,我无意中发现了这一点。

来自此堆栈溢出帖子: 在 EF 4.3 中使用参数执行存储过程时,对象类型 System.Collections.Generic.List 不存在映射

事实证明,为 SqlParameter 传递匿名对象将导致无法为 CLR 类型“<>f__AnonymousType23”找到到关系类型的映射。

对此代码的修复很简单,首先将参数放入实际的 SqlParameter 对象中。但是通过将 SqlParameter 对象放入 List 并返回 ToArray() 被 EF FromSql 方法接受,传递该 SqlParameter 对象不起作用。

 List<SqlParameter> sqlParameters = new List<SqlParameter>();
 sqlParameters.Add(new SqlParameter("@_iUserNumber", userId));

 var list = context.DocumentList.FromSql<Document>("EXECUTE spSelDocsList @_iUserNumber", sqlParameters.ToArray()).ToList();
Run Code Online (Sandbox Code Playgroud)