Частное развертывание SQL Server Compact 4.0 с Entity Framework 6.0 и NuGet

У меня стандартно настроен проект WPF с установленными Entity Framework 6 и SQL Server Compact 4.0. Когда я создаю свой проект, все необходимые файлы для развертывания SQL Server CE правильно копируются в папку Release, включая System.Data.SqlServerCe.dll.

Но запуск проекта на машине без установленного SQL Server Compact выдает System.IO.FileLoadException.

В моей среде разработки System.Data.SqlServerCe.dll загружается из GAC. Я нашел эту ссылку, где объясняются номера версий dll: http://technet.microsoft.com/en-us/library/gg213826.aspx

Я предположил, что версия System.Data.SqlServerCe.dll сборки NuGet - 4.0.0.0.

Поэтому я вручную изменил ссылку System.Data.SqlServerCe.dll в моем проекте на файл 4.0.0.1 из частной папки и скопировал System.Data.SqlServerCe.dll 4.0.0.1 на рабочий компьютер.

Я изменил app.config вот так:

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
  </system.data>

Теперь я получаю это исключение на машине разработки:

Указанное соединение не относится к типу SqlCeConnection.

На производственной машине я получаю System.Data.Entity.Core.EntityException.

Есть ли шанс получить частное развертывание, работающее с NuGet и EF 6? Или надо вручную копировать все файлы в папки x86, amd64?


person Vojtěch Dohnal    schedule 11.11.2013    source источник
comment
Вам необходимо установить пакет EntityFramework.SqlServerCompact 6.0.1, который создает соответствующие настройки в app.config. И вы не можете использовать версию 4.0.0.1, но должны использовать версию сборки 4.0.0.0. Я напишу новый пост в блоге о частном развертывании EF6 и SQLCE 4.   -  person ErikEJ    schedule 11.11.2013
comment
Большое спасибо за быстрый ответ! Это было бы прекрасно. У меня установлен упомянутый пакет. Я использую ссылку Entity Framework как в клиентских, так и в модельных проектах. Тем не менее я не могу понять, почему я получаю System.Data.Entity.Core.EntityException со ссылкой 4.0.0.0 в app.config; и я не могу увидеть какие-либо подробности исключения.   -  person Vojtěch Dohnal    schedule 12.11.2013
comment
Возможно, вы можете использовать это сообщение в блоге в качестве вдохновения: erikej.blogspot.dk/2013/10/?   -  person ErikEJ    schedule 12.11.2013
comment
Да, это отличные сообщения, но зачем мне копировать все эти файлы SQL CE, если все упомянутые файлы уже скопированы из пакета NuGet. Это из-за версии сборки файлов, отличной от System.Data.SqlServerCe.dll? Я считаю, что борюсь с проблемой, как на самом деле должна выглядеть моя папка bin / release, мои ссылки и файл конфигурации, чтобы я мог просто скопировать контент или использовать ClickOnce.   -  person Vojtěch Dohnal    schedule 12.11.2013
comment
Нет. Пост в блоге описывает ClickOnce / xcopy, так сказать.   -  person ErikEJ    schedule 12.11.2013
comment
Похоже, System.Data.Entity.Core.EntityException уже другая проблема - в config. Этого изменения в DbProviderFactories должно быть достаточно. Приложение все еще не работает, но проблема в другом, я сообщу позже, спасибо.   -  person Vojtěch Dohnal    schedule 19.11.2013


Ответы (1)


System.Data.Entity.Core.EntityException уже был проблемой в моем приложении, я также забыл изменить имя БД после развертывания.

Я следил за этим руководством, и теперь оно работает:

http://erikej.blogspot.sk/2013/11/entity-framework-6-sql-server-compact-4_25.html

person Vojtěch Dohnal    schedule 30.11.2013