2013-11-17 2 views
0

У меня возникла проблема с развертыванием приложения с EF4.2 в качестве ORM и MySQL как DB. Я добавляю в проект MySQL.Data (v.6.7.4) и MySQL.Data.Entity (v.6.7.4.1). Мой app.config имеет следующую структуру:Развертывание приложения с помощью EF

<configuration> 
    <configSections> 
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="Settings.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
    </sectionGroup> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="SUDBContext" connectionString="metadata=res://*/Model.ORM.SUDB.csdl|res://*/Model.ORM.SUDB.ssdl|res://*/Model.ORM.SUDB.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;{0}&quot;" providerName="MySql.Data.MySqlClient" /> 
    </connectionStrings> 
    <userSettings> 
    <Settings.Settings> 
     <setting name="RequestTimeout" serializeAs="String"> 
     <value>3000</value> 
     </setting> 
     <setting name="FindOrderByBarcodeUrl" serializeAs="String"> 
     <value>http://developmachine.babadu.ru/exchange/restservice/getorderinfobybarcode.php?barcode={0}</value> 
     </setting> 
     <setting name="ChangeOrderStateUrl" serializeAs="String"> 
     <value>http://developmachine.babadu.ru/exchange/restservice/changeordershippingstatus.php?id={0}&amp;status={1}</value> 
     </setting> 
     <setting name="ConnectionString" serializeAs="String"> 
     <value>server=localhost;user id=root;password=qwerty123;persist security info=True;database=sudb</value> 
     </setting> 
     <setting name="DefaultPrinter" serializeAs="String"> 
     <value /> 
     </setting> 
     <setting name="IsDirectPrint" serializeAs="String"> 
     <value>False</value> 
     </setting> 
     <setting name="FindOrderByNumberUrl" serializeAs="String"> 
     <value>http://babadu.ru/exchange/restservice/getorderinfobyid.php?id={0}</value> 
     </setting> 
    </Settings.Settings> 
    </userSettings> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> 
    </startup> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-6.7.4.0" newVersion="6.7.4.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
</configuration> 

Когда я пытаюсь запустить приложение и сделать запрос из БД на разработчиков машины все в порядке. Когда я пытаюсь запустить его на машине клиента, у меня есть ошибка: «Указанный поставщик магазина не может быть найден в конфигурации или недействителен». Что я сделал неправильно?

P.S. MySQL .NetConnector v6.7.4 и .NetFramework v.4 имеет установленный на клиентском компьютере файл

ответ

0

Я сделал это! Спасибо за статью MySQL Forum Я нашел причину ошибки. Что я сделал:

  1. Регистрация нового поставщика Поставщик MySQL Data
  2. Добавить тег удалить инвариантную
  3. Set ProviderName к System.Data.EntityClient в связи строковый тег
  4. Set провайдера до MySql.Data.MySqlClient непосредственно в строке подключения

Модифицированный App.config имеет следующий strucure:

<configuration> 
    ... 
    <connectionStrings> 
    <add name="SUDBContext" connectionString="metadata=res://*/Model.ORM.SUDB.csdl|res://*/Model.ORM.SUDB.ssdl|res://*/Model.ORM.SUDB.msl;provider=MySql.Data.MySqlClient;provider connection string='{0}'" providerName="System.Data.EntityClient"/> 
    </connectionStrings> 
    ... 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add name="MySQL Data Provider" 
     invariant="MySql.Data.MySqlClient" 
     description=".Net Framework Data Provider for MySQL" 
     type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/> 
     </DbProviderFactories> 
    </system.data> 

...

Смежные вопросы