【发布时间】:2018-06-29 10:21:31
【问题描述】:
我在 VS 2017 中建立了一个新项目。我的意图是使用 EF CodeFirst 方法。到目前为止,我使用的是 Azure SQL 数据库,而在这个测试项目中,我想使用我的远程 MySQL 数据库。我已经创建了用户并且权限设置得恰到好处。我可以通过 MySQL Workbench 访问这个远程数据库服务器。
我创建了一个新的空白 MVC 项目,并通过 Nuget 安装了 MySQL.Data.Entity(版本 6.9.10)。
我的上下文类:
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class WebDb : DbContext
{
public WebDb() : base("WebDb")
{
}
public DbSet<Candidate> Candidates { get; set; }
}
我的 web.config 有这些条目:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.10.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
<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.9.10.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
我的连接字符串是:
<connectionStrings>
<add name="WebDb" providerName="MySql.Data.MySqlClient" connectionString="server=x.x.x.x;uid=dbuser;pwd=password;database=temp1;" />
</connectionStrings>
我有一个简单的域类
public class Candidate
{
public int Id { get; set; }
public string Name { get; set; }
}
当我给出 Enable-Migrations -Force 命令时,我得到
正在检查上下文是否针对现有数据库... System.Data.Entity.Core.ProviderIncompatibleException:提供者 没有返回 ProviderManifestToken 字符串。 ---> MySql.Data.MySqlClient.MySqlException:无法连接到任何 指定的 MySQL 主机。在 MySql.Data.MySqlClient.NativeDriver.Open() 在 MySql.Data.MySqlClient.Driver.Open() 在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder 设置)在 MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection() 在 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection() 在 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() 在 MySql.Data.MySqlClient.MySqlPool.GetConnection() 在 MySql.Data.MySqlClient.MySqlConnection.Open() 在 MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection 连接)在 System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection 连接)---内部异常堆栈跟踪结束---在 System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection 连接)在 MySql.Data.Entity.MySqlManifestTokenResolver.ResolveManifestToken(DbConnection 连接)在 System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection 连接,DbProviderManifest&providerManifest) 在 System.Data.Entity.DbModelBuilder.Build(DbConnection 提供者连接)在 System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext 内部上下文)在 System.Data.Entity.Internal.RetryLazy
2.GetValue(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()1 writeXml) 在 System.Data.Entity.Utilities.DbContextExtensions.GetModel(DbContext 上下文)在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration 配置、DbContext usersContext、DatabaseExistenceState 存在状态,布尔调用由创建数据库)在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration 配置)在 System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration 迁移配置)在 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore() 在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() 提供者未返回 ProviderManifestToken 字符串。
at System.Data.Entity.Internal.LazyInternalContext.get_ModelBeingInitialized() at System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext context, XmlWriter writer) at System.Data.Entity.Utilities.DbContextExtensions.<>c__DisplayClass1.<GetModel>b__0(XmlWriter w) at System.Data.Entity.Utilities.DbContextExtensions.GetModel(Action
据我所知,我已经进行了广泛的搜索,但无济于事。这里发生了什么事?我错过了什么?
【问题讨论】: