хранимая процедура не работает с EF 4.0 и WCF Data Services - PullRequest
2 голосов
/ 28 июня 2011

Я работаю с EF4 и WCF Data Services. Я хотел бы взять мое текущее соединение SQL и перепрограммировать его, используя этот метод, чтобы я мог получить доступ к данным от различных клиентов (мобильные, веб, Win Client). Я знаю, что могу использовать 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.svc или http://localhost:1753/TestWcfDataService.svc/Users или http://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, не имеет соответствующий столбец в данных читатель с тем же именем.

UserID - мой первичный ключ и идентификатор в таблице Users. Любая помощь будет принята с благодарностью. Заранее благодарю.

1 Ответ

0 голосов
/ 28 июня 2011

Я нашел ошибку и извините, что потратил ваше время. Несчастный случай с моей стороны. Поскольку UserID - мой первичный ключ, я не использовал его в моих критериях выбора, поэтому в считывателе данных не было столбца. Итак, резюмируем: убедитесь, что все ваши критерии фильтрации также перечислены в критериях выбора в вашей хранимой процедуре. Простое изменение моего сохраненного процесса на (ниже) исправило его.

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