Подтвердить что ты не робот

Использование 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 на установочной машине? Благодарим за помощь.

4b9b3361

Ответ 2

Только для записи, с SQL CE 4, записи web.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>

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

Ответ 3

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

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

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

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

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

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

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

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

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

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

Большое спасибо sql server compact Team!

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

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

Спасибо

Ответ 4

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

У вас есть файл 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, вы увидите, что у него есть < system.data > node, который, вероятно, выглядит примерно так:

<system.data>
    <DbProviderFactories>
        <add name="Odbc Data Provider" ... stuff here ... />
        <add name="OracleClient Data Provider" ... stuff here ...>
        ... more lines similar to the one above ...
        <add name="Microsoft SQL Server Compact Data Provider" Invariant="System.Data.SqlServerCe.3.5" ...>
    </DbProviderFactories>
</system.data>

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

<system.data>
    <DbProviderFactories>        
    </DbProviderFactories>
</system.data>

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

ОБРАТНАЯ СВЯЗЬ

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

Ответ 5

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

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

Я общался с этим сообщением. Я пробовал почти все. Я установил " System.Data.SqlServerCe" с помощью nugets.

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

<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" />
  <!--<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />-->
  <!--<add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />-->
</DbProviderFactories>

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

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

<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" />
  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  <add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>

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