【发布时间】:2017-02-27 15:53:09
【问题描述】:
我有一个 .NET Core 项目(针对 .NET 4.6),我必须同时使用 EF Core 和 EF 6。由于我也在使用 MySQL,所以我的 project.json 看起来像这样:
{
...
"dependencies": {
"EntityFramework": "6.1.3", // For EF 6
"MySql.Data.Entity": "6.9.9", // For EF 6 and MySQL
"Pomelo.EntityFrameworkCore.MySql": "1.1.0", // For EF Core
...
},
"frameworks": {
"net461": {}
},
...
}
问题是当我尝试像这样使用 MySqlConnection 类时:
var connection = new MySqlConnection(connectionString);
我收到以下错误:
The type 'MySqlConnection' exists in both
'MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' and
'MySqlConnector, Version=0.7.2.0, Culture=neutral, PublicKeyToken=null'
有没有办法让我准确指定我想使用哪个库MySqlConnection,或者有没有其他方法可以解决这个问题?
这些是我的限制:
- 我需要 EF Core,因为我们使用
ASP.NET Core Identity(以及其他仅使用 EF Core 的 .NET Core 库) - 我需要 EF 6,因为我们发现目前没有适用于 MySQL 的 EF Core 实现足以满足我们的所有需求。
- 由于我们使用的是 MySQL,我需要将
MySql.Data.Entity用于 EF 6 和Pomelo.EntityFrameworkCore.MySql用于 EF Core。我们已经尝试为 EF Core 使用其他库,但它们带有很多错误。我们发现 Pomelo 是最稳定的。
编辑:
我认为原因是Pomelo.EntityFrameworkCore.MySql 引用了MySqlConnector,它具有命名空间/类MySql.Data.MySqlClient.MySqlConnection,MySql.Data.Entity 也是如此。
【问题讨论】:
-
使用完整的命名空间?
var connection = new MySql.Data.MySqlConnection(connectionString); -
@DavidG 完整的命名空间是
MySql.Data.MySqlClient.MySqlConnection,但这不起作用,因为两个包中都存在MySql.Data.MySqlClient。 -
您可以通过将代码移动到它自己的项目中来解决这个问题,该项目仅引用您需要的单个版本的类。
-
@DavidG 也想过这个问题,但我希望有更好的解决方案,因为使用 EF 6 和 EF Core(模型等)的部分之间共享了大量代码
-
您可以将模型放入他们自己的项目中并共享。无论如何,我觉得这是一件好事。
标签: mysql entity-framework .net-core entity-framework-core project.json