【问题标题】:Deploying application with EF使用 EF 部署应用程序
【发布时间】:2013-11-30 18:51:42
【问题描述】:

我在使用 EF4.2 作为 ORM 和 MySQL 作为 DB 部署应用程序时遇到问题。我已将 MySQL.Data (v.6.7.4) 和 MySQL.Data.Entity (v.6.7.4.1) 添加到项目中。我的 app.config 具有以下结构:

<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>

当我尝试启动应用程序并从开发人员机器上的数据库中进行查询时,一切都很好。当我尝试在客户端机器上启动它时,出现错误:“在配置中找不到指定的商店提供程序,或者无效。”。 我做错了什么?

附: MySQL .NetConnector v6.7.4 和 .NetFramework v.4 已经安装在客户端机器上

【问题讨论】:

    标签: mysql entity-framework app-config


    【解决方案1】:

    我成功了!感谢MySQL Forum 的文章,我找到了这个错误的原因。我做了什么:

    1. 注册新的提供者MySQL数据提供者
    2. 添加标签删除不变量
    3. 在连接字符串标记中将 providerName 设置为 System.Data.EntityClient
    4. 直接在连接字符串中将提供程序设置为 MySql.Data.MySqlClient

    修改后的 App.config 结构如下:

    <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>
    

    ...

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2023-04-02
      • 2012-04-22
      • 2021-02-25
      相关资源
      最近更新 更多