4

我有一个 ASP.NET 应用程序,我想将它上传到提供 MySQL 数据库的主机。我正在使用 Visual Studio 2012、.NET 4.5、Entity Framework 5.0,并且我已经为 Visual Studio 1.0.2 安装了 MySQL。我一直在尝试连接到本地 MySQL 服务器,但遇到了一些问题。

起初我在我的项目中引用MySql.DataMySql.Data.Entity6.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.DataMySql.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 版本:

nuget 经理

希望这可以帮助。

4

1 回答 1

1

我写了一篇关于这个主题的博客文章,我的项目可以在本文底部下载。

我必须安装(如我的文章中所述)MySqlDataEntity -Pre,它安装 beta 版本 6.7.2 beta,以获得与 EF 5 的良好兼容性,但我看到现在的当前版本是 6.7.4,所以我更新了我的项目相应地,它也同样有效,所以我还更新了项目以从我的博客下载。

希望这可以帮助您开始使用 EF 和 MySql。

顺便说一句,如果不清楚,您必须从 NuGet 安装 MySql.Data.Entities,它也将安装 MYSql.Data,因为 Entities 依赖于它。

于 2013-10-02T15:34:04.053 回答