Одна модель POCO с разными поставщиками данных - PullRequest
5 голосов
/ 12 ноября 2010

У меня есть клиентское приложение (WPF, C #, .net4), которое использует модель сущностей POCO, подключенную через провайдера SQLITE.Поэтому я хочу, чтобы в проекте asp.net (с поставщиком MSSQL) были те же сущности из этого проекта, чтобы использовать там те же сущности, которые я использую в своем клиентском приложении.Я хочу создать некоторую функциональность репликации между моим клиентским приложением (SQLITE) и веб-сервером (MSSQL) с использованием одной модели poco с использованием веб-сервисов.

Поэтому у меня есть ссылка на мою модель сущностей в обоих проектах с разнымиСтроки подключения для файлов EDMX.И в этом случае (потому что edmx был скомпилирован для провайдера sqlite), когда я пытаюсь использовать провайдер данных mssql, я получаю исключение:

невозможно преобразовать System.Data.SqlConnection в System.Data.SQliteConnection

Итак, мой вопрос: возможно ли использование разных поставщиков данных в одной модели сущностей?Как лучше всего использовать одну и ту же модель в разных проектах?

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

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

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

0 голосов
/ 12 ноября 2010

с POCO это должно быть возможно. Пока веб-служба передает данные XML или JSON, она не будет привязана к какой-либо конкретной реализации коннектора данных. Я не уверен, что это будет в двоичном режиме - возможно, есть какая-то ссылка на модель данных. Вы получаете эту ошибку из приложения WPF или из веб-службы? Похоже, вы все еще пытаетесь проверить это в клиентском приложении. Вы уже пытались внедрить веб-сервис?

...