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

时间:2011-06-28 04:13:54

标签: 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

在我的TestDataService.svc中,我在InitialService中有以下内容:

config.SetEntitySetAccessRule("Users", EntitySetRights.All);
config.SetServiceOperationAccessRule("GetUserByID", ServiceOperationRights.All

我还在这里列出的文件中调用存储过程:

[WebGet]
public List<User> GetUserByID(string UserID)
{
   TestEntities entity = new TestEntities();
   return entity.GetUserByID(Convert.ToInt32(UserID)).ToList();
}

在我的EF模型中,我已将存储过程作为函数导入并保存为GetUserByID,并返回User实体。

当我测试它时,我可以通过使用以下方式在浏览器中查看实体来访问实体: http://localhost:1753/TestWcfDataService.svchttp://localhost:1753/TestWcfDataService.svc/Usershttp://localhost:1753/TestWcfDataService.svc/Users(1) - UserID为1的样本用户

我知道它通过服务使用LINQ和ODATA但是当我尝试通过这个访问存储过程时:

http://localhost:1753/TestWcfDataService.svc/GetUserByID?UserID='1' - 然后我收到HTTP 500错误,无法显示该页面。我调试它,我查看错误,这里是:

  

System.Data.EntityCommandExecutionException   没有被用户代码Message = The处理   数据阅读器与...不兼容   指定'TestModel.User'。成员   类型''UserID',没有   数据中的相应列   读者同名。

UserIDUsers表中的主键和标识。任何帮助将不胜感激,并提前感谢您。

1 个答案:

答案 0 :(得分:0)

我发现错误并抱歉浪费你的时间。我的一个不幸事件。因为UserID是我的主键,所以我没有在我的选择标准中使用它,因此数据阅读器中没有列。因此,回顾一下:确保所有过滤条件也列在存储过程的选择条件中。只需将我的存储过程更改为(下方)更正它。

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