У меня есть проект по созданию программы, которая может работать в двух режимах:
внутренние пользователи получают доступ к централизованной базе данных (SQL Server) и могут просматривать / редактировать элементы друг друга, или
внешние клиенты создают все свои собственные данные локально (SQL Server Compact) и упаковывают их в XML по электронной почте, чтобы запросить расценки.
Вопрос в том, каков наилучший способ сделать это, чтобы минимизировать техническое обслуживание и максимизировать функциональность EF? Я также хотел бы использовать хранимые процедуры в SQL Server для операций записи, но это не главный приоритет, если слишком много проблем.
Я мог бы вручную создать отдельный SSDL перед развертыванием, но это дополнительная работа и подвержена ошибкам. Я мог бы пойти Model First, но я думаю, что это усложнит обновления баз для обоих провайдеров. Я мог бы пойти в направлении Code First, используя шаблоны DbContext Generator T4, но затем я потерял много преимуществ EF, таких как отслеживание изменений и отображение хранимых процедур. А с CF мне придется значительно улучшить шаблоны T4, или мне все равно придется создавать отдельный SSDL.
Есть статья или какие-нибудь инструменты, чтобы сделать это проще?
Редактировать: Я решил, что лучший способ сделать это - использовать Code First для создания моей модели и использовать новый код для первых миграций. С помощью миграций я могу сгенерировать скрипт изменения для полного экземпляра сервера и просто применить полные изменения к локальной базе данных CE. Другое преимущество заключается в том, что у меня есть полный контроль над строкой подключения, и я могу указать ее любому провайдеру.
Это небольшая дополнительная работа, чтобы вручную создать классы POCO, создать классы конфигурации (я предпочитаю определять с помощью Fluent API) и добавить дополнительные функции (например, уникальные индексы) в первый класс миграции, но в конце наименьшая работа в целом.
Мне придется выяснить, как избежать использования хранимых процедур позднее, но к тому времени EF 5 может быть доступен и решить мою проблему.