Stored procedures 存储过程不适用于EF 4.0和WCF数据服务

Stored procedures 存储过程不适用于EF 4.0和WCF数据服务,stored-procedures,wcf-data-services,Stored Procedures,Wcf Data Services,我正在使用EF4和WCF数据服务。我想用这个方法重新连接我当前的SQL连接,这样我就可以从各种各样的客户端(移动客户端、web客户端、Win客户端)访问数据。我知道我可以使用LINQ,但我只是想用存储过程来代替 这是我的示例存储过程: CREATE procedure getuserbyID ( @UserID int) AS SELECT Firstname, Lastname, Email From TestDatabase WHERE UserID = @UserID 在我的TestD

我正在使用EF4和WCF数据服务。我想用这个方法重新连接我当前的SQL连接,这样我就可以从各种各样的客户端(移动客户端、web客户端、Win客户端)访问数据。我知道我可以使用LINQ,但我只是想用存储过程来代替

这是我的示例存储过程:

CREATE procedure getuserbyID (
@UserID int)
AS 
SELECT Firstname, Lastname, Email From TestDatabase WHERE UserID = @UserID
在我的TestDataService.svc中,InitialService中包含以下内容:

我还调用文件中存储的proc,如下所示:

[WebGet]
public List<User> GetUserByID(string UserID)
{
   TestEntities entity = new TestEntities();
   return entity.GetUserByID(Convert.ToInt32(UserID)).ToList();
}
在我的EF模型中,我将存储的proc作为函数导入,并将其保存为GetUserByID,然后它返回一个用户实体

当我测试它时,我可以通过使用以下工具在浏览器中查看它来访问实体: http://localhost:1753/TestWcfDataService.svc 或http://localhost:1753/TestWcfDataService.svc/Users 或http://localhost:1753/TestWcfDataService.svc/Users1 -用户ID为1的示例用户

我知道它通过服务与LINQ和ODATA一起工作,但当我尝试通过以下方式访问存储过程时:

http://localhost:1753/TestWcfDataService.svc/GetUserByID?UserID=“1”-然后我得到一个HTTP 500错误,该页面无法显示。我调试它并查看错误,结果如下:

System.Data.EntityCommandExecutionException 未被用户代码消息处理= 数据读取器与 指定了“TestModel.User”。成员 “UserID”类型的没有 数据中对应的列 具有相同名称的读取器


UserID是我在Users表中的主键和标识。任何帮助都将不胜感激,并提前向您表示感谢。

我发现了错误,很抱歉浪费了您的时间。我这方面的不幸。因为UserID是我的主键,所以我在选择条件中没有使用它,因此数据读取器中没有列。因此,重述一下:确保存储过程中的选择条件中也列出了所有筛选条件。只需将我的存储过程更改为下面即可更正它

CREATE procedure getuserbyID
(@UserID int)
AS
SELECT UserID, Firstname, Lastname, Email From TestDatabase WHERE UserID = @UserID

我发现了错误,很抱歉浪费了你的时间。我这方面的不幸。因为UserID是我的主键,所以我在选择条件中没有使用它,因此数据读取器中没有列。因此,重述一下:确保存储过程中的选择条件中也列出了所有筛选条件。只需将我的存储过程更改为下面即可更正它

CREATE procedure getuserbyID
(@UserID int)
AS
SELECT UserID, Firstname, Lastname, Email From TestDatabase WHERE UserID = @UserID

只是猜测一下,但存储过程返回的列看起来像用户实体,但不包含键属性UserID。我认为EF需要关键属性值来实现实体。您是否尝试将UserID作为存储过程中的一列返回?这只是猜测,但您的存储过程返回的列看起来像用户实体,但不包含键属性UserID。我认为EF需要关键属性值来实现实体。您是否尝试将UserID作为存储过程中的一列返回?