Синхронизация базы данных Microsoft - PullRequest
1 голос
/ 17 марта 2012

У меня есть следующий сценарий:

Сервер

  • SQL Server 2008
  • Core (Entity Framework и бизнес-логика)
  • Служба WCF
  • Веб-приложение MVC (для управления бэкэндом)

Клиент

  • Локальная база данных - упрощенная модель основной базы данных
  • Клиент WPF

Требования

  • Клиент должен работать в автономном режиме и сохранять данные
  • Измененные данные должны извлекаться с сервера через службу WCF
  • Клиент не должен изменять данные, а вызывать метод WCF (если он недоступен, ставить в очередь вызов)

Возможные решения

  • Microsoft Sync Framework - я думаю, что это излишне, потому что мне в основном нужна односторонняя синхронизация, а также структура данных не одинакова.
  • Сериализация наборов данных через WCF, да, потому что наборы данных поддерживают слияние и автономные сценарии, но не устарели ли они?
  • Entity Framework? Я пытался создать прототип, но EF, кажется, не очень хорошо отвечает моим потребностям (мне нужно найти объект и изменить его, если он был изменен, или добавить его, если он не существует)

Вопрос

  • Как вы думаете, что является наиболее подходящим подходом?
  • Является ли SQL Server Compact хорошей локальной базой данных?

Мне очень интересны ваши мысли. Спасибо!

1 Ответ

0 голосов
/ 17 марта 2012

Microsoft Sync Framework, на мой взгляд, не подходит, потому что у вас разные схемы.Я также могу представить, что у вас есть некоторые бизнес-правила о том, какие данные разрешено изменять и как их следует синхронизировать.

Выбор между DataSets и Entity Framework зависит от ваших потребностей.Object-Relation-Mapper показывает, когда вы действительно используете объектную модель.

Если ваш домен достаточно сложен и у вас есть знания, использование полноценной доменной модели - это, безусловно, хорошее решение, которое действительно может масштабироваться и обрабатывать сложные проекты.Если ваш проект несколько проще и вы не хотите создавать модель предметной области, которую вы можете выбрать для наборов данных.

Лично я считаю, что изучение входов и выходов из моделирования доменов и Entity Framework как ORM - этохороший выбор для проектов.Когда у вас будет достаточно опыта использования этих технологий, вы даже предпочтете их в небольших проектах.

О проблемах, которые возникают у вас с прототипом EF.

Поскольку схема данных клиента иСервер отличается, я бы использовал пользовательские объекты передачи данных для перемещения данных между ними.Таким образом, вы отделяете объектные модели, и они могут меняться независимо друг от друга.

Клиент знает все, что нужно знать об изменениях данных.Поскольку он имеет локальное представление данных сервера, он знает, были ли данные добавлены, изменены или удалены.Почему бы вам не добавить эти знания в ваш серверный вызов?Если вы используете поле в DTO, в котором указано, добавлен ли объект, изменен или удален, серверу не нужно будет это обнаруживать.

...