Однако в службе WCF или RIA вы всегда должны синхронизировать ее с моделью сущностей базы данных и не можете запустить какой-либо сохраненный процесс без его шаблона результата в службе.Поэтому в некотором роде Silverlight заставляет нас быть тесно связаны с моделью базы данных.
Bzzzzt !!!Неправильный ответ !!
Службы WCF вообще не должны быть тесно связаны с базой данных.Фактически, с помощью службы WCF вы все еще можете реализовать n-уровневый подход:
WCF end point -> calls through to business layer -> calls DAL -> calls database
Преимущество службы WCF заключается в том, что ее можно использовать для предоставления вашему бизнес-уровню различных отключенных слабосвязанных клиентов.(или потребители - они не должны быть клиентами UI).Все, что выставлено, сделано как интерфейс - служба WCF представляет контракт, который она гарантирует выполнить.Объекты данных, возвращаемые через этот интерфейс, могут быть любыми (если они могут быть сериализованы через границу WCF).Это не обязательно должны быть DataTable или объекты данных, которые отражают структуру моей базы данных.
Я не могу комментировать службы RIA, потому что я не играл с ними.Однако я понимаю, что это всего лишь сервисы WCF с кучей вещей, сгенерированных для вас, что означает, что они могут сильно напоминать структуру вашей базы данных.Чтобы обойти это, нужно просто потратить немного времени и создать свои собственные сервисы WCF.Другие респонденты, возможно, смогут более подробно рассказать об этом:)
Редактировать: Похоже, что реальная проблема заключается в том, что ваш механизм поиска данных - это то, что тесно связано,Существует несколько способов решения этой проблемы, чтобы изолировать последствия внесения изменений (обратите внимание, что это не исчерпывающий список):
гарантирует, что ваши вызовы WCF возвращают типизированные объекты - дажепри тесной связи с базой данных объект тип остается прежним, даже если его внутренние компоненты могут изменяться (т. е. если вы добавляете другое свойство), поэтому вам не нужно изменять интерфейс WCF при добавлении другого столбца вВаша таблица базы данных
создаст отдельную сборку, которая реализует получение данных из базы данных.Это становится вашим DAL ( D ata A ccess L ayer), помещает туда ваш материал LinqToSql, это отделяет его от сборки, которая реализует конечные точки WCF
преобразовать ваши данные, которые возвращаются из базы данных, в более общие и независимые объекты данных легкого веса, прежде чем они пройдут через границу WCF (Объекты передачи данных - DTO)
используйте инструмент генерации кода (их много) для генерации ваших интерфейсов WCF на основе ваших определений объектов данных