EF4.4中的存储过程

时间:2013-09-27 03:58:35

标签: sql-server-2008 .net-4.0 entity-framework-4

我们不得不将使用EF5的项目降级为EF4,并且正在努力将存储过程转换为EF模型。

该过程返回一个表:

  -- A table to hold the results
  DECLARE @Result TABLE
  (
      ActionType    CHAR(1),
      ChangedBy     VARCHAR(50),
      ChangedDate   DATETIME,
      FieldName     VARCHAR(150),
      OriginalValue VARCHAR(100),
      NewValue VARCHAR(100),
      ForeignKeyName VARCHAR(50),
      ForeignKeyValue VARCHAR(15)
  )

然后添加记录,并返回:

  -- Return the result
  SELECT * FROM @Result

但是,添加proc似乎非常不同。存储过程未显示在我们的Entity Framework上下文中。

所以我们按照这里显示的示例: http://msdn.microsoft.com/en-us/library/bb896231.aspx

但是,我们选择返回类型为“复杂”,但是当我们点击“获取列信息”时,我们会遇到以下错误:

  

类型的例外   发生了“Microsoft.SqlServer.Management.Sdk.Sfc.EnumeratorException”   在尝试获取列信息时。异常消息是:   ExecuteScalar需要一个开放且可用的连接。该   连接的当前状态已关闭。捕获的内部异常是   'System.InvalidOperationException'类型,带有以下错误消息:   'ExecuteScalar需要一个开放且可用的连接。该   连接的当前状态已关闭。'。

任何人都可以帮助解决此错误,或者解释一下更好的方法来引用EF4.4中的存储过程吗?

1 个答案:

答案 0 :(得分:1)

解决!不要使用SELECT *!

-- Return the result
  SELECT       
      ActionType,
      ChangedBy,
      ChangedDate,
      FieldName,
      OriginalValue,
      NewValue,
      ForeignKeyName,
      ForeignKeyValue
  FROM @Result