我们不得不将使用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中的存储过程吗?
答案 0 :(得分:1)
解决!不要使用SELECT *!
-- Return the result
SELECT
ActionType,
ChangedBy,
ChangedDate,
FieldName,
OriginalValue,
NewValue,
ForeignKeyName,
ForeignKeyValue
FROM @Result