【发布时间】:2013-10-02 13:32:13
【问题描述】:
我有一个 ASP.NET 应用程序,我想将它上传到提供 MySQL 数据库的主机。我正在使用 Visual Studio 2012、.NET 4.5、Entity Framework 5.0,并且我已经为 Visual Studio 1.0.2 安装了 MySQL。我一直在尝试连接到本地 MySQL 服务器,但遇到了一些问题。
起初,我在项目中的 6.6.5.0 版本中引用了 MySql.Data 和 MySql.Data.Entity。但是当我尝试在包管理器控制台中执行Update-Database 时,出现以下错误:
System.DateTime System.Data.Entity.Migrations.Model.InsertHistoryOperation.get_CreatedOn()
seems 是 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)
我通过在我的 Web.Config 文件中包含一个特定的DbProviderFactory 解决了这个问题:
<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 版本:
希望这会有所帮助。
【问题讨论】:
标签: mysql asp.net asp.net-mvc-4 visual-studio-2012 entity-framework-5