Я работаю с 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
. Любая помощь будет принята с благодарностью. Заранее благодарю.