Как перейти от LINQ к SQL к «LINQ to WCF»? - PullRequest
7 голосов
/ 04 февраля 2009

Я собираю приложение WPF, которое в конечном итоге будет использовать веб-службы WCF в качестве источника данных.

На этапе создания прототипа я использую LINQ to SQL для базы данных SQL 2008 и пришел к выводу о том, насколько легко я могу сделать «Добавить новый элемент | LINQ to SQL Classes» и сгенерировать класс модели для таблицы. , затем поговорите с ним с помощью LINQ и передайте это моему пользовательскому интерфейсу XAML, очень приятно.

Но что происходит, когда мы переключаем источник данных с SQL Server на веб-службы WCF? Чтобы продолжить использовать LINQ, мне нужно:

  • написать свои собственные классы LINQ-to-web-сервисов вручную (используя IQueryable и т. Д .?)
  • есть ли инструмент генерации кода, который делает это, что-то вроде "LINQ-to-WCF" (странно, что этот термин даже не встречается в Google)
  • или мне придется неэффективно получать большое количество записей из моего веб-сервиса, создавать из них объекты, а затем отправлять запросы LINQ-to-objects?

Спасибо за любое направление, которое вы можете дать здесь.

ДОБАВЛЕНО: спасибо за ответы, очень полезно, но привело к некоторой путанице:

  • в этом руководстве по MSDN говорится "Добавить новый элемент | ADO.NET Entity Data Service "
  • У меня VS2008, и я могу просто "Добавить новый элемент | ADO.NET Entity Data Model "
  • это MSDN видео говорит о создании нового проекта с шаблоном ADO.NET Data Service , которого у меня нет в VS2008
  • Каковы различия между всеми из них, которые используются чаще всего?
  • и из того, что я до сих пор читал, все, что связано с «LINQ to Entities», влечет за собой затраты, тогда как «LINQ to SQL» является бесплатным, поэтому опции «Entity Data Service / Model» выше относятся к LINQ. субъектам?

Ответы [ 4 ]

5 голосов
/ 04 февраля 2009

Возможно, вам понадобится ADO.NET Data Services . Вам нужно будет добавить реализацию интерфейса IUpdatable к вашим сущностям, и вы можете использовать LINQ to SQL , Entity Framework, SubSonic или ряд других , Мы используем шаблоны PLINQO CodeSmith , которые позволяют вам добавить эту функцию в LINQ to SQL.

2 голосов
/ 04 февраля 2009

Общий LINQ для WCF может не иметь смысла. В частности, вызовы WCF предоставляют данные только очень особым образом, что на самом деле не соответствует способу работы LINQ. Например, мой сервис может иметь следующий контракт:

List<DAO> GetObjectsInDateRange(DateTime start, DateTime end);
void ExportObjectsToLegacySystem(List<DAO> data);

Как вы выражаете либо в формате LINQ. В частности, когда начало и конец не являются членами DAO. Единственный способ выразить это - предоставить сервису интерфейс IQueryable, и я не знаю, насколько это возможно.

Теперь вы всегда можете сделать:

var data = from dao 
in wcfService.GetObjectsInDateRange(DateTime.Today,DateTime.Today.AddDays(50))
where dao.AmountOfStuff > 20
select dao;

При этом вы, безусловно, можете создать интерфейс LINQ, адаптированный к вашему собственному сервису. Допустим, у вашего сервиса есть метод:

List<DAO> GetObjects(DAOFilter filterObject);

где DAOFilter - это объект, который задает все ваши критерии «где», вы можете написать поставщика LINQ, который преобразует все выражения в этот объект DAOFilter. Это было бы невероятно одноразовое решение со значительным объемом работы, поэтому я бы посоветовал против него.

Я повторяю совет, чтобы взглянуть на ADO.Net Data Services .

2 голосов
/ 04 февраля 2009

Посмотрели ли вы ADO.NET Data services . Здесь вы можете запросить хранилище данных по сети с помощью синтаксиса linq.

Вы сохраните контекст данных LINQ to SQL, но представите его в Интернете и разрешите своим клиентам запрашивать контекст в стандартных операторах LINQ. Очевидно, что вам придется защищать службы данных, чтобы подключаться могли только авторизованные клиенты, но, по сути, с минимальной работой вы могли бы получить свой контекст данных, так сказать, на стороне клиента.

0 голосов
/ 16 января 2010

Вы можете добавить класс Linq to SQL непосредственно в проект WCF и установить режим сериализации в классе Linq to SQL на Однонаправленный. Если вы сделаете это, классы будут отображаться поверх службы WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...