【问题标题】:The data reader is incompatible with the specified field with Entity Framework 5数据读取器与 Entity Framework 5 的指定字段不兼容
【发布时间】:2014-03-19 23:05:55
【问题描述】:

我在使用 EF 5 时遇到以下错误,我在网上对其进行了大力研究,并认为这只是一个映射问题。我检查过的一切都很好。

有人可以根据以下信息告诉我错误可能是什么吗???

数据读取器与指定的不兼容 'VisionModel.sSRPTFundexDocCodes1_Test_Result'。类型的成员, 'NumEmployeesatApp1',在数据中没有对应的列 同名阅读器。

当我调试下面的代码sn-p时,就在我得到上述错误的时候。

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sSRPTFundexDocCodes1_Test_Result>("sSRPTFundexDocCodes1_Test", subscriberIDParameter, applicationNumParameter);

进入存储过程的参数是OK的。

映射很好。左边的映射是:NumEmployeesatApp,右边是完全一样的。

我完全删除了我的 EDMX 文件并从头开始创建它,但发生了同样的错误。 当我从函数中执行“获取列信息”时,列名与上述存储过程中的内容完全相同。

从 EDMX 文件 (Vision) 生成的模板和上面的存储过程具有完全匹配的列。

顺便说一句,我可以毫无问题地从 EF 5 模型运行其他 INSERTSELECT LINQ 查询。

【问题讨论】:

  • 我在应用程序之外运行了存储过程,它返回 3 条记录...这让我感到困惑..我不知道我还能做什么...
  • 存储过程返回的列的名称是否正确 - 存储过程返回的结果集中是否有 NumEmployeesatApp1 列或告诉 EF NumEployeessatApp1 属性期望的列名称是什么的映射?
  • 这是我希望进入我在上面发布的 sn-p 并实际看到 EF 处理请求的部分(类似于进入类型化数据集生成的代码并查看命令和列是什么那里。sn-p 是“return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sSRPTFundexDocCodes1_Test",subscriberIDParameter, applicationNumParameter);" 但是,一旦我到了这一点并尝试进入它,我就可以't。
  • 我仔细检查了我的调试选项,并且我在调试选项中未选中“仅启用我的代码”,我应该能够进入生成的代码。如果我能够进入这里,我相信我将能够看到发生了什么......任何关于这方面的帮助将不胜感激......
  • EF5 代码不是开源的。即使您使用公共符号,您也可能无法单步执行代码,因为没有可用的资源。此外,您不会看到很多,因为代码将被优化,除了一些局部变量之外您将看不到任何东西。但是,您可以做的是使用 Sql Profiler 查看 EF 发送到数据库的内容(您也可以使用 IntelliTrace 查看它)。尝试执行 EF 发送到 Sql 查询的确切命令并查看结果。用结果和 sn-p 更新您的问题,显示您如何在 MSL&CSDL 中映射存储过程

标签: entity-framework


【解决方案1】:

如果您使用带有输出参数的存储过程,我遇到了同样的问题,您需要在函数导入中将返回类型标记为 NONE。这很奇怪,但它有效。

【讨论】:

  • 如果你这样做,你可以从 proc 中得到返回的整数。但是如果你需要一个复杂的类型呢?
  • 这个。这不是你一开始会考虑做的事情,但一旦你这么说,它就说得通了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 2020-11-13
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
相关资源
最近更新 更多