Одна модель или две? - Database First EF 6.0 для SQL Server (2005/2008) требуется автономная поддержка SQL Server CE 4.0

Я переписываю старое приложение VB6, которое использовало SQL Server 2005 и Access MDB в VS 2013 C# с EF 6.0 для SQL Server 2008 R2 и SQL Server CE 4.0. Приложение должно работать в автономном режиме в случае сетевых ошибок, которых много. Автономная версия требует доступа только для чтения. Повторное использование кода было легко в VB6, я просто изменил соединения.

Я выполнил 98% кода, используя модель Database First EF 6.0 (только что обновлена). Теперь мне нужно добавить поддержку оффлайн. Я думал, что могу поменять соединения, но прочитал, что я не могу. Я открыт для изменения используемой модели, но предпочел бы сохранить подход "База данных" или "Модель сначала".

У меня есть внешнее приложение, которое создает и копирует все данные, необходимые с SQL Server, на SQL Server CE, и мне не нужна технология SQL Server в автономном режиме. Я не хочу переписывать весь мой код только для поддержки автономных соединений.

Я готов поддержать несколько моделей EDMX, одну для SQL Server и одну для SQL Server CE, но прежде чем я хотел получить некоторые мнения и советы.

Теоретически приложение будет тестировать доступ к серверу при запуске и подключаться к автономному режиму, если сервер недоступен (при условии, что автономный SQL Server CE уже создан и готов).

1 ответ

Я предполагаю, что SSCE означает SQL Server CE. EF поддерживает несколько бэкэндов для одной и той же модели. В этом случае у вас будет один CSDL и два SSDL и два MSL-файла. CSDL представляет вашу модель, в то время как SSDL представляет вашу базу данных (и зависит от конкретной базы данных - например, использует базы данных определенных типов). MSL просто говорит EF, как CSDL отображается на SSDL. Однако дизайнер не поддерживает этот сценарий, поскольку дизайнер работает только с файлами EDMX, а не с отдельными артефактами CSDL/MSL/SSDL. Возможно, у вас может быть два файла EDMX, но тогда вы должны будете убедиться, что CSDL в обоих случаях одинаковы, и вам придется отключить генерацию кода из одного из файлов EDMX - в противном случае у вас будет два набора объектов, которые будут создать конфликт. Несмотря на то, что это может работать, есть большая проблема - Visual Studio 2013 больше не поддерживает Sql Server CE. Это означает, что не существует провайдера DDEX для Sql Server CE для VS2013, который делает невозможным создание / обновление моделей EF, использующих Sql Server CE, поскольку конструктор EF полагается на провайдера DDEX ( это происходит, если вы пытаетесь использовать Sql Server CE с EF Designer на VS2013). Из-за вышеизложенного вам лучше попробовать подход CodeFirst. Вам не нужно беспокоиться о CSDL/MSL/SSDL, поскольку они должны быть построены из вашего кода (если вам нужно настроить модель так, как она касается хранилища (например, вы хотите сопоставить столбец с конкретным типом хранилища), вы бы это сделали все еще должен иметь if и настроить модель в зависимости от используемого вами бэкэнда, но она должна быть намного более управляемой, чем отдельные SSDL). CodeFirst не зависит от DDEX, поэтому вы снова можете использовать его в VS2013, просто добавив пакеты NuGet.

Другие вопросы по тегам