Как отправить класс данных Linq через WCF и связать элемент управления вводом с этим свойством класса? - PullRequest
0 голосов
/ 21 мая 2009

Для строго типизированного & типобезопасного решения, я должен сделать следующий шаг.

  1. Создайте приложение Silverlight.
  2. Привязка управления вводом к классу данных Linq.
  3. Проверка данных с использованием правила из атрибута класса данных.
  4. Отправка данных на сервер через WCF.

Но у меня есть вопрос.

  1. Как связать элемент управления вводом со свойством класса данных linq?
  2. Как это сделать с минимальными уровнями (слоями) и минимально необходимыми dll (для проекта Silverlight)?

PS. .Net RIA Service - Просмотр в мае не мой окончательный ответ. Потому что размер всех необходимых DLL и некоторый сгенерированный код.

Спасибо

1 Ответ

1 голос
/ 21 мая 2009

Что ж, я рад, что вы знаете, что .NET RIA Services предоставит все эти вещи, но я понимаю, что размер имеет значение. Имейте в виду, что, поскольку похоже, что вы рассматриваете Silverlight 3, вы можете использовать опцию для кэширования сборок фреймворка, чтобы значительно уменьшить размер Xap:

http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/06/silverlight-3-s-new-assembly-caching.aspx

Я не уверен, что кэширование применимо к сборкам RIA Services, но если это так, это означает, что они загружаются только один раз.

Предполагая, что это не то, что вам нужно, есть 2 других варианта передачи данных из классов Linq (я предполагаю, что вы имеете в виду классы Entity Framework) для клиента. Самый простой способ - создать собственную службу WCF, как вы упомянули. Таким образом, вы пишете классы данных на сервере, и прокси-классы автоматически генерируются на клиенте, который имитирует серверные классы. Недостатком здесь является то, что бизнес-правила не будут разделены между ними. Таким образом, ваши атрибуты проверки данных должны будут записываться и применяться на клиенте и сервере отдельно.

Следующим вариантом является использование ADO.NET Data Services для перемещения данных с сервера на клиент. Это на шаг выше предыдущего, поскольку вам не нужно самостоятельно писать службу WCF для размещения данных; он создан для вас. Конечно, это требует дополнительной Dll для упаковки в Xap.

Чтобы ответить на некоторые ваши вопросы напрямую:

  1. Вы никогда не сможете связать элемент управления вводом напрямую с классом данных Linq. Вы можете привязать элементы управления только к прокси-классам на стороне клиента, которые генерируются путем ссылки на службу WCF (либо ту, что вы написали самостоятельно, либо ту, которая предоставлена ​​ADO.NET Data Services).
  2. Если вы не используете .NET RIA Services, вам потребуется создать собственный атрибут для связи с вашими бизнес-правилами, а затем вручную обработать события в привязках данных, чтобы прочитать атрибут и применить ваши правила.
  3. Для отправки данных на сервер используйте любой из вышеперечисленных вариантов - либо собственную пользовательскую службу WCF, либо службы данных ADO.NET.

Ваш последний вопрос о привязке элемента управления вводом к свойству выглядит следующим образом:

MyControl.xaml.cs:

public MyControl() {
  this.DataContext = new LinqDataClass();
}

MyControl.xaml:
<TextBlock Text={Binding PropertyOnLinqDataClass}/>

Здесь LinqDataClass является представлением на стороне клиента вашего класса данных Linq на стороне сервера и имеет свойство PropertyOnLinqDataClass. Вам потребуется реализовать интерфейс INotifyPropertyChanged на стороне клиента для правильной поддержки двусторонней привязки данных.

...