【问题标题】:Execute Stored Procedure in Entity Framework doesn't return data在实体框架中执行存储过程不返回数据
【发布时间】:2014-03-27 00:55:45
【问题描述】:

我在 SQL Server 中有一个存储过程,该过程返回一个带有数据的结果集,或者 一条错误消息。

我有一个视图模型,其中包含存储过程在结果集中检索到的字段,并且我正在像下一条指令一样执行该过程

IEnumerable<StateVM> states= context.Database.SqlQuery<StateVM>(
                "Calculate_State_1  {0}, {1}, {2}, {3}, {4}, {5}, {6}",
                _from, _to, 8, 'Type1, Id1, Id2, StrError);

当我在 SQL 中使用参数执行查询时,它们是数据,但在实体框架中,“状态”返回与从 System.String 类型具体化到 System.Int32 的指定转换相关的内容无效。

我做错了什么?

【问题讨论】:

  • 我没有关注这个:something relationed with the specified conversion from type System.String materialized to System.Int32 are not valid。完全按照您收到的错误消息发布。
  • 代码优先?数据库优先?你的存储过程是什么样的?
  • 称我为老式但在调用存储过程时我放弃了 EF 并返回到 ADO.Net(无论如何这都是 EF 在幕后使用的)。是的,这是更多的工作,但它得到了回报,因为它有很好的记录,你不必处理这样的事情。
  • 这是错误,对不起,我有西班牙文的VS,在这里输入西班牙文的错误,如果有用的话,我会这样做,但是,translatedd,这是错误..

标签: c# sql-server entity-framework stored-procedures


【解决方案1】:

您没有准确发布您的错误消息,但您的过程似乎会导致 StateVM 类中的列和整数的文本输入,因此 EF 无法进行此转换。

检查结果集中的空值、空字符串和尾随空格

【讨论】:

  • 我尝试了一些东西,我用一个属性重写了 VM,SP 返回的字段之一,我知道字段是和字符串,并且错误仍然存​​在。
【解决方案2】:

您应该能够以与处理表相同的方式引入存储过程并像方法调用一样执行它们。

【讨论】:

  • 我该怎么做???...添加存储过程,创建导入功能等... ????
  • 如果您允许 VS 创建数据模型,请选中存储过程旁边的框或在服务器资源管理器中创建一个 sql 连接并将您的存储过程拖到您的模型上。或者直接打开 .dbml/.edmx 文件,然后将对象拖到模型上。
【解决方案3】:

考虑不使用 EF 进行存储过程调用,而是使用 ADO.Net。它有很好的文档记录,您遇到的任何问题都一定会得到多次解决。

ADO.Net Using Stored Procedures

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多