我有一个 ASP.NET 应用程序,我想将它上传到提供 MySQL 数据库的主机。我正在使用 Visual Studio 2012、.NET 4.5、Entity Framework 5.0,并且我已经为 Visual Studio 1.0.2 安装了 MySQL。我一直在尝试连接到本地 MySQL 服务器,但遇到了一些问题。
起初我在我的项目中引用MySql.Data
了MySql.Data.Entity
6.6.5.0 版本。但是当我尝试Update-Database
在包管理器控制台中进行操作时,出现以下错误:
System.DateTime System.Data.Entity.Migrations.Model.InsertHistoryOperation.get_CreatedOn()
这似乎是 Entity Framework 5.0 和更早版本的 Connector/.Net(Visual Studio 的 MySQL 连接器)的问题。由于该过程是一种发现,遗憾的是我不记得我的项目是如何引用MySql.Data
和MySql.Data.Entity
版本 6.6.5.0 的。
我删除了引用,然后使用 NuGet 在 6.7.4.0 版本中下载并引用了相同的程序集。这解决了我之前遇到的错误,但现在Update-Database
给了我以下错误:
Could not load file or assembly 'MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
DbProviderFactory
我已经通过在我的 Web.Config 文件中包含一个特定的来解决这个问题:
<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, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
如果我省略remove
标签,我会收到错误消息:
Column 'InvariantName' is constrained to be unique. Value 'MySql.Data.MySqlClient' is already present.
我认为这意味着不知何故我的项目仍然有一个DbProviderFactory
服务于 MySQL 库的 6.6.5.0 版本。但是当我搜索我的项目的文本文件时,我在任何地方都找不到该字符串6.6.5.0
。
目前这个解决方案让我连接到我的本地 MySQL 服务器,但是当我将项目发布到我的托管服务提供商并在我的浏览器中访问网站时,我只收到一条错误消息。我想知道如何删除隐含的 6.6.5.0-serving DbProviderFactory
,这既是我学习的一部分,也是因为我认为我的解决方法可能是我的网站在我的托管服务提供商处无法运行的原因。
作为寻找解决方案的线索,我发现当我尝试添加引用时,我只能看到 6.6.5.0 的(几个版本):
但是当我去 NuGet 管理器时,我只安装了 6.7.4.0 版本:
希望这可以帮助。