Использование Entity Framework с частной компактной установкой SQL Compact

Я использую Entity Framework 4 в настольном приложении с SQL Compact. Я хочу использовать личную установку SQL Compact с моим приложением, чтобы мой установщик мог установить SQL Compact без предоставления пользователю второй установки. Он также избегает проблем с управлением версиями по дороге.

Моя машина разработки имеет SQL Compact 3.5 SP1, установленную как общедоступная, поэтому мое приложение отлично работает там, как и следовало ожидать. Но он не работает на моей тестовой машине, на которой не установлен SQL Compact. Я получаю эту ошибку:

The specified store provider cannot be found in the configuration, or is not valid. 

Я знаю, что некоторые люди испытывали трудности с частными установками SQL Compact, но я использовал их некоторое время , и мне они очень нравятся. К сожалению, мой обычный подход к установке не работает. Я проверил номера версий в своих файлах SQL CE, и все они 3.8.8078.0, что является версией SP2 RC.

Вот файлы, которые я включил в свою личную установку:

  • sqlcecompact35.dll
  • sqlceer35EN.dll
  • sqlceme35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll
  • System.Data.SqlServerCe.Entity.dll

Я добавил ссылку на System.Data.SqlServerCe в мой проект, и я подтвердил, что все перечисленные выше файлы копируются в папку приложения на установочной машине.

Вот код, который я использую для настройки EntityConnectionStringBuilder при открытии файла SQL Compact:

 var sqlCompactConnectionString = string.Format("Data Source={0}", filePath); // Set Builder properties builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName); builder.Provider = "System.Data.SqlServerCe.3.5"; builder.ProviderConnectionString = sqlCompactConnectionString; var edmConnectionString = builder.ToString(); 

Мне не хватает файла? Не хватает ли параметра конфигурации, необходимого для того, чтобы сообщить Entity Framework, где найти мои SQL Compact DLL? Любые другие предложения, почему EF не находит мои SQL Compact DLL на установочной машине? Спасибо за вашу помощь.

Я понял, как это сделать, благодаря сообщению в блоге Стив Ласкер . В основном, вот что вам нужно сделать:

(1) Установите ссылку на System.Data.SqlServerCe.dll в своем проекте. Установите для свойства CopyLocal значение True.

(2) В App.config для вашего проекта добавьте следующую разметку XML. Он сообщает EntityFramework о вашей частной установке SQL Compact для поставщика данных:

       

(3) В проекте установки добавьте следующие файлы в папку приложения в редакторе файловой системы:

  • sqlcecompact35.dll
  • sqlceme35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.Entity.dll

Только для записи, с SQL CE 4, записи в web.config следующие:

        

Версия = 4.0.0.1 в случае частного развертывания и версии = 4.0.0.0 в случае общего развертывания.

спасибо за ваш совет – мне очень помогли. В блоге SQL Server Compact-Team есть сообщение, в котором добавлена ​​дополнительная информация о выпуске Sql Server Compact 3.5 SP2.

После некоторого некоторого времени с частным развертыванием компакт-диска sql я обнаружил некоторые дополнительные требования.

Я опробовал свое приложение на нескольких разных системах и узнал, что мое приложение не работает должным образом на некоторых из них.

Пример: Попробуйте следующее:

-Я установил чистую установку win3p sp3

-установлено расширение .net Framework 4.0

-отделил мое приложение на новую установку (включая все необходимые DLL-файлы и настройки, описанные в вашем блоге / блоге / блоге)

Итак, после некоторых исследований выяснилось, что в дополнение к установке .net framework 4 мне также пришлось установить .net framework 2, и он работал нормально.

Итак, вот мой вопрос: какой компонент используется в компактном редакторе sql server, который не содержится в .NET Framework 4?

Я не хочу перегружать мою настройку и подключать две фреймворки к моему загрузчику … Кто-нибудь знает какой-нибудь хороший совет?

Большое спасибо серверу sql server compact!

SQL Server Compact v3.5 зависит от «Visual C ++ Runtime 2005 (или 8.0)» (также известного как CRT80). Мы упаковываем модули CRT80 в нашу MSI. В случае частного развертывания,

вам нужно позаботиться об этой зависимости. Вещи работают с .NET FX v2.0 в системе автоматически, потому что .NET FX v2.0 также пакеты и устанавливает модули CRT80.

благодаря

Это то, что сработало для меня:

У вас есть файл machine.config для dotNet версий 2.0 и 4.0:

dotNET 2.0

  C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config 

dotNet 4.0

  C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config 

Если вы откроете файл для версии 2.0, вы увидите, что он имеет узел , который, вероятно, выглядит примерно так:

     ... more lines similar to the one above ...    

Принимая во внимание, что если вы откроете один для dotNet 4.0, он выглядит более жалким:

     

Или, возможно, у него даже нет узла вообще !!! В любом случае просто скопируйте узел целиком из файла machine.config для v2 в файл для v4.

ПРИМЕЧАНИЕ

Если у вас возникли проблемы с сохранением редактирования файла v4 machine.config, вам может потребоваться щелкнуть правой кнопкой мыши пару раз, щелкнув значок запуска редактора, чтобы перейти к запуску в режиме администратора.

Застревание с той же проблемой,

«указанный поставщик магазина не может быть найден в конфигурации или недействителен».

Я пришел сюда. Я пробовал почти все. Я установил « System.Data.SqlServerCe » с помощью nugets.

Итак, у меня уже была строка кода, добавленная в моем web.config

       

Тем не менее ошибка продолжалась.

Я избавился от проблемы, раскомментировав последние две строки с комментариями в вышеприведенном коде … так что теперь это становится

       

Надеюсь, это поможет. Спасибо.

Interesting Posts

Создание собственного внутреннего classа с reflectionм java

Фильтровать файл, когда столбец находится в белом списке

Команда импорта ImageMagick дает ошибку в окнах?

API-ключ для GCM неожиданно недействителен? Несанкционированная ошибка (401)

Как создать резервную копию и восстановить системный буфер обмена в C #?

Удаленный конструктор по умолчанию. Объекты все еще могут быть созданы … иногда

Может ли два приложения прослушивать один и тот же порт?

Как получить доступ к элементу управления внутри шаблона данных в пользовательском интерфейсе C # Metro в коде

Использование setValueAt для воссоздания взаимоисключающих флажков

«Всегда использовать эту программу для открытия этих файлов» неактивен. Зачем?

Автоматическая компоновка: получить высоту UIImageView, чтобы правильно вычислить высоту ячейки

Восстановление образа системы Windows на меньшем диске

Легкий способ скрыть системную панель на Android ICS

MySQL Workbench не присутствует в MySQL Community RPM для Fedora 21

Sublime Text: переместить окно сборки вправо

Давайте будем гением компьютера.