- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 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 命令时,我得到
Checking if the context targets an existing database... System.Data.Entity.Core.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> MySql.Data.MySqlClient.MySqlException: Unable to connect to any of the specified MySQL hosts. at MySql.Data.MySqlClient.NativeDriver.Open() at MySql.Data.MySqlClient.Driver.Open() at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings) at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection() at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection() at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() at MySql.Data.MySqlClient.MySqlPool.GetConnection() at MySql.Data.MySqlClient.MySqlConnection.Open() at MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection) at System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) --- End of inner exception stack trace --- at System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) at MySql.Data.Entity.MySqlManifestTokenResolver.ResolveManifestToken(DbConnection connection) at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) at System.Data.Entity.Internal.RetryLazy
2.GetValue(TInput input) at
1 writeXml) at System.Data.Entity.Utilities.DbContextExtensions.GetModel(DbContext context) at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext, DatabaseExistenceState existenceState, Boolean calledByCreateDatabase) at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration) at System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration migrationsConfiguration) at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore() at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() The provider did not return a ProviderManifestToken string.
System.Data.Entity.Internal.LazyInternalContext.InitializeContext()<br/>
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
据我所知,我进行了广泛的搜索,但无济于事。这里发生了什么事?我错过了什么?
最佳答案
我最近遇到了和你一样的问题。在 SQL Server 中一切正常,但我在转换为 MySQL 时遇到了很多问题。对我有用的一些事情是:
Install-Package MySQL.Data -Version 6.9.9
Install-Package MySql.Data.Entity -Version 6.9.10
较新的 8.0 版 MySQL 包似乎有问题。当我恢复到旧版本时,它起作用了。
您的 app.config 应如下所示:
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<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.8.8.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" />
<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.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
</configuration>
即使在那之后,我才发现 MySQL 中存在一些差异。例如,您的迁移“索引”语句将不起作用。您必须自己编辑迁移文件并构建索引。另一件我刚刚读到但没有遇到的事情是 MySQL 驱动程序不允许多个连接,这可能意味着改变您检索异步集合的方式。最后,我遇到了 RowVersion 是 byte[] 的问题。我使用了以下文章的一个变体来解决这个问题(希望如此!)。
Better way to implement a row version with EF Core and MySQL?
关于mysql - "The provider did not return a ProviderManifestToken string"带有 Entity Framework 的 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48353585/
我正在尝试使用 ASP.Net MVC3、Entity Framework 和 MySQL 创建一个网络应用。 我已将以下代码添加到我的 Web.Config 文件中。 我还在“Co
应用: .NET 4.5 C# 使用 EF6 和数据库优先方法 支持 SQL Server 2008R2、2012 和 2014 此问题与自动生成的 edmx 文件的 ProviderManifest
这个问题在这里已经有了答案: Error-Attempt by method 'X.set_DbConnection(System.Data.Common.DbConnection)' to acc
我正在连接到 Windows Azure SQL,但收到错误提供程序未返回 ProviderManifestToken 字符串。这曾经有效,直到我不知道的一些事情发生了变化。当 VS2013 向导创建
我正在使用 ASP.NET 4 和 Visual Studio 2010 进行工作。该项目使用 Entity Framework 。 我正在使用 MS SQL Server 2008(错误地),而一位
我有一个使用 EF 代码优先的 asp.net MVC3 项目。对于我的单元测试,我一直使用 SQL Server CE 4.0 和 SQL Server 2008 Express。两者都与 EF 完
我正在学习使用 .NET MVC 3 和 C# 进行开发。我正在尝试使用“代码优先”方法创建应用程序,但是当我尝试从我的数据库中提取数据时,我收到一条错误消息“提供商未返回 ProviderManif
我有一个使用 Entity Framework 和 SQL Server 2008 数据库的 MVC 应用程序。我使用 EF 向导来生成我的数据模型。 我有一个标准的 SQL Server 表 Dat
我正在尝试复制 MSDN 上找到的示例。我正在使用 ASP.NET 和 EF 4.1(CTP?)。我已使用 NuGet 安装 EntityFramework 包。 我收到此错误:提供程序未返回 Pro
这是我第一次尝试在带有 MVC3 的 .NET 中完全使用 mysql,使用代码优先技术。我已经通过网络平台安装了 VS2010 (10.0.3) 和 MVC3、.NET 4。然后我安装了 MySQL
我在 VS 2017 中建立了一个新项目。我打算使用 EF CodeFirst 方法。到目前为止,我使用的是 Azure SQL 数据库,而在这个测试项目中,我想使用我的远程 MySQL 数据库。我已
我有一个使用 oracle 11g、EF 5 代码优先和 system.data.oracleclient 的 Web 应用程序。 所以现在,它已升级到 EF 6 和 Oracle Managed D
我正在尝试使用 Entity Framework 连接到我的 PostgreSQL 数据库。不幸的是,在我的 SSDL 文件中使用 EdmGen(或 EdmGen2)生成模型后,ProviderMan
我是一名优秀的程序员,十分优秀!