Как я могу совместно использовать Linq к Объектам datacontracts между WCF и Silverlight

Кросс-аппликация должна помочь в этом.

Select R.RegionId, C.ProductId, C.MaxOrders From Region R
CROSS APPLY (
    SELECT TOP 1 T.RegionID, T.ProductID, MAX(T.Quantity) AS MaxOrders
    FROM(
      SELECT Region.RegionID, [Order Details].ProductID, SUM([Order 
      Details].Quantity) AS 
     Quantity
    FROM Region
    JOIN Territories ON Region.RegionID = Territories.RegionID
    JOIN EmployeeTerritories ON Territories.TerritoryID = 
  EmployeeTerritories.TerritoryID
   JOIN Employees ON EmployeeTerritories.EmployeeID = Employees.EmployeeID
   JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID
   JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID
   GROUP BY Region.RegionID, [Order Details].ProductID
 ) T
WHERE T.RegionID = R.RegionId
GROUP BY T.RegionID, T.ProductID
ORDER BY MaxOrders DESC ) C
5
задан Ciaran O'Neill 20 February 2009 в 14:52
поделиться

5 ответов

То, что Вы пробуете, будет только работать с "полной".NET к "полной".NET (или по крайней мере, подобранное); и даже затем, это нарушает правила SOA...

Вся эта мысль о контракте данных состоит в том, что Вы совместно используете форму данных, но не реализацию. Это означает, что не имеет значения, что Silverlight не знает о EDMX или некоторых более необычных разновидностях атрибутов DataContract (как обратные вызовы) - данные все еще неповреждены.

Путем потребления mex-сгенерированной версии классов у Вас все еще будет то же существенное поведение данных - который является намеченным примером использования WCF с Silverlight. Поэтому просто используйте сервисную ссылку. С другой стороны, у Вас должен будет быть класс DTO, который находится между EDMX и WCF; пока DTO только использует атрибуты WCF (но никакой EDMX), необходимо быть в порядке, но очевидно это имеет огромную стоимость обслуживания. Я лично сомневаюсь, что это стоит того в самых простых сценариях.

4
ответ дан 14 December 2019 в 13:48
поделиться

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

Как был сказан, просто создайте свой собственный контракт данных (DTO) классы, которые соответствуют форме данных, которые будут возвращены. Возвратите отдельные экземпляры тех классов или Список их.

Я рекомендую против использования DataSet, DataTable или чего-либо еще определенного для платформы. Причина этого раньше была, что она не взаимодействовала с другими платформами, такими как Java. Однако я видел ситуации, где это не взаимодействует правильно в.NET - между различными версиями.NET, и я подозреваю между полной.NET и Silverlight. Используйте DTO, как выше.

1
ответ дан 14 December 2019 в 13:48
поделиться

Я все еще думаю, что Ваш лучший выбор НЕ состоит в том, чтобы попытаться передать Ваши linq к объектам классы от Вашего компонента WCF до Вашего клиента. Вместо этого создайте простые классы DataContract, которые просто содержат данные (только свойства). Заполните это на стороне WCF, отправьте, она через и затем в Вашем клиенте использует данные для воссоздания надлежащего объекта, который можно использовать с linq.

Иметь смысл?

1
ответ дан 14 December 2019 в 13:48
поделиться

От того, что было сказано здесь и от того, что я считал в другом месте, кажется, что EDM datacontracts просто не может быть совместно использован с Silverlight таким образом, я хотел бы.

Однако действительно похоже, что возможно совместно использовать linq к sql datacontracts с Silverlight. Не точно, что я хотел только что-то, которое я мог бы рассмотреть. Я просто начинаю с WCF и Silverlight и не решил, который является моим наилучшим вариантом пока еще.

0
ответ дан 14 December 2019 в 13:48
поделиться

Я пытаюсь сделать то же самое и только что опубликовал сообщение на форумах Silverlight.net.

Если нет способа, то какой ужасный надзор со стороны MS! За сущностями будущее, в будущем в Linq to SQL не будет много улучшений. Неужели это действительно редкость - использовать Silverlight + WCF + Entity Framework ?? Вы либо застряли с отдельными сущностями в каждом пространстве имен прокси-сервера службы (это плоское решение не работает в реальном приложении Silverlight), либо дублируете схемы и переводите между схемами ваших клиентов и схемами сущностей, что лишает красоты и простота Entity Framework.

0
ответ дан 14 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: