Entity Framework 4 LINQ для запросов сущностей через WCF - PullRequest
3 голосов
/ 11 января 2011

Мне нужно создать службу WCF для возврата объектов, запрашиваемых из базы данных через Entity Framework.В большинстве статей, которые я прочитал, предлагается создать метод для каждого типа запроса.Но я думаю, что это приведет к взрыву числа методов, которые я создам, например:

  • GetAllCars ()
  • GetCarsByBrand (string brandName)
  • GetCarsByYear(int year)
  • GetCarsByBrandAndYear (строка brandName, int year)
  • GetCarsByTireSize (float tyreSize)
  • GetCarsByEngineType (string engineType)
  • EngineCizeBySignEng, string engineType)
  • GetCarsByEngineSizeBetween (float lowerEngineSize, float upperEngineSize)
  • и т.д ..

Кроме того, если требуется новый запрос, то япотребуется создать новый метод для его поддержки.

Должен быть более общий способ сделать это.Что было бы идеально, если бы клиент мог создать дерево выражений через LINQ, отправить его через WCF, а затем выполнить запрос через инфраструктуру сущностей.Тогда у меня может быть один метод для поддержки всех запросов.Например:

  • QueryCars (выражение выражения)

Или отправить выражение в виде строки:

  • QueryCars (строковое выражение)

Как разработчики решили эту проблему гибких запросов?

В настоящее время я работаю в .NET 4.0.Безопасность на самом деле не является проблемой, поскольку это только внутреннее приложение.

Ответы [ 2 ]

3 голосов
/ 11 января 2011

То, что вы ищете, это Службы данных WCF .Он использует протокол OData для запроса данных с помощью Linq.

Пример со службой OData Stack Overflow :

var query = from u in service.Users
            orderby u.Reputation descending
            select u;

Console.WriteLine ("Top ten Stack Overflow users");
foreach (var u in query.Take(10))
{
    Console.WriteLine ("{0}: {1}", u.DisplayName, u.Reputation);
}

В приведенном выше коде service.Usersтипа IQueryable<User>, что позволяет запрашивать его с помощью дерева выражений.

Вы можете легко попробовать службу SO с помощью LINQPad или добавить ссылку на URL службы в проекте VS.

3 голосов
/ 11 января 2011

По вашему описанию вам не нужны чистые сервисы WCF, а WCF Data Services . Служба данных позволяет вам выставлять IQueryable и определять запрос Linq на клиенте.

...