mysql - 如何在 Azure 网站中定义 MySQL 数据库的连接字符串

标签 mysql asp.net azure

我遇到了如何在 Azure 网站中设置连接字符串以连接到 MySQL 数据库的问题。

我正在开发托管在 Azure Webistes 中的 ASP.NET MVC 应用程序。它使用两个数据库:Azure 本身中的 SQL Server 和远程托管中的 MySQL。

在Visual Studio中我使用MySQL提供的.NET Connector来生成模型,连接字符串如下所示:

<add name="myEntities" connectionString="metadata=res://*/Models.MyModel.csdl|res://*/Models.MyModel.ssdl|res://*/Models.MyModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=myserver.com;user id=tom;password=tomspass;database=mydatabase&quot;" providerName="System.Data.EntityClient" />  

另一方面,我有一个脚本可以在 Azure 中为我的应用程序重新创建环境。它告诉 Azure 在 Azure 网站配置面板中设置两个连接字符串,从而覆盖 web.config 文件中的值。在脚本中我这样定义它们:

$connectionStrings = ( `
    @{Name = $sqlAppDatabaseName; Type = "SQLAzure"; ConnectionString = $sql.AppDatabase.ConnectionString}, `
    @{Name = "myEntities"; Type = "MySql"; ConnectionString = "metadata=res://*/Models.MyModel.csdl|res://*/Models.MyModel.ssdl|res://*/Models.MyModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=myserver.com;user id=productionuser;password=productionpassword;database=mydatabase&quot;"}
)

不幸的是,它不起作用,当点击代码访问 MySQL 中的数据时,出现以下错误:

Unable to cast object of type 'MySql.Data.MySqlClient.MySqlConnection' to type 'System.Data.Entity.Core.EntityClient.EntityConnection'.

如果我在 Azure 面板中删除 MySQL 的连接字符串并使用 web.config 文件中定义的连接字符串(带有生产值),则不会出现错误!

我做错了什么?脚本中的连接定义不正确吗?但如果与 web.config 文件相同怎么办?我认为这是因为在 Azure 中定义连接字符串时,未设置“providerName”部分,但为什么如果它已经在 web.config 中设置了呢?

非常感谢您的帮助!

最佳答案

我没有尝试过这个,因为我手边没有 MySQL 数据库,但我认为你有两个问题:

  • 连接字符串的提供者名称部分是错误的,您应该这样定义

<add name="myEntities" connectionString="metadata=res://*/Models.MyModel.csdl|res://*/Models.MyModel.ssdl|res://*/Models.MyModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=myserver.com;user id=tom;password=tomspass;database=mydatabase&quot;" providerName="MySql.Data.MySqlClient" />

并在您的 Web.config 中替换

<entityFramework>
  <defaultConnectionFactory
      type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="v11.0" />
    </parameters>
  </defaultConnectionFactory>
  <providers>
    <provider
      invariantName="System.Data.SqlClient"
      type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>

<entityFramework>
  <providers>
    <provider invariantName="MySql.Data.MySqlClient"
      type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity"/> 
  </providers>
</entityFramework>
<system.data>
  <DbProviderFactories>
    <remove invariant="MySql.Data.MySqlClient"></remove>
    <add name="MySQL Data Provider"
      invariant="MySql.Data.MySqlClient"
      description=".Net Framework Data Provider for MySQL"
      type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.2.0"/>
  </DbProviderFactories>
</system.data>
  • 在脚本中添加 ProviderType 属性

$connectionStrings = ( @{Name = $sqlAppDatabaseName; Type = "SQLAzure"; ConnectionString = $sql.AppDatabase.ConnectionString}, @{名称=“myEntities”;类型 = "MySql"; ProviderType = "MySql.Data.MySqlClient"; ConnectionString = "metadata=res:///Models.MyModel.csdl|res:///Models.MyModel.ssdl|res://*/Models.MyModel.msl;provider=MySql。 Data.MySqlClient;提供商连接字符串=“server=myserver.com;用户id=生产用户;密码=生产密码;数据库=mydatabase””} )

关于mysql - 如何在 Azure 网站中定义 MySQL 数据库的连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533557/

相关文章:

mysql - 序列化与模型对象不同的 DATE 记录

mysql - 在没有密码提示的情况下在 Ubuntu 上安装 MySQL

mysql - DateTime转换支持mysql datetime datetype

java - 在 Android 应用程序中使用 Json

c# - 带有 Redis 的 OutputCache 在 Localhost 上工作,但不在 Azure WebApp 上工作

php - MySQL 数据库中的文本采用 ISO-8859-1(拉丁文)编码,但应为 UTF-8

asp.net - 部署 Web 应用程序 : How to make just one page secure (https)

javascript - 使用 .net 渲染 React JS 服务器端

azure - 我可以更改应用服务计划/应用服务以使用应用服务环境吗

Azure ML 应用程序 - 完整体验 - 自动训练和使用