“提供程序没有返回providermanifesttoken字符串”mysql with entity framework

ndasle7k  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(300)

我在2017年设立了一个新项目。我的意图是使用ef codefirst方法。到目前为止,我使用了azuresql数据库,而在这个测试项目中,我想使用我的远程mysql数据库。我已经创建了用户和权限设置恰到好处。我可以通过mysql工作台访问这个远程数据库服务器。
我创建了一个新的空白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 connection)位于system.data.entity.core.common.dbproviderservices.getprovidermanifesttoken(dbconnection connection)--内部异常堆栈跟踪结束---位于system.data.entity.core.common.dbproviderservices.getprovidermanifesttoken(dbconnection连接)位于system.data.entity.utilities.dbconnectionextensions.getproviderinfo(dbconnection连接,dbprovidermanifest和providermanifest)位于system.data.entity.dbmodelbuilder.build(dbconnection providerconnection)位于system.data.entity.internal.lazynternalcontext.createmodel(lazynternalcontext internalcontext)位于system.data.entity.retrylazy 2.GetValue(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 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 1 writexml)位于system.data.entity.utilities.DbContextensions.getmodel(dbcontext context context)位于system.data.entity.migrations.dbmigrator..ctor(dbmigrationsconfiguration configuration,dbcontext userscontext,databaseexistencestate,位于system.data.entity.migrations.design.migrations.scaffoldrunner.runcore()的system.data.entity.migrations.dbmigrator..ctor(dbmigrationsconfiguration configuration)处的boolean calledbycreatedatabase)system.data.entity.migrations.design.toolingfacade.baserunner.run()提供程序未返回providermanifesttoken字符串。
据我所知,我到处寻找都没有结果。这里发生了什么?我错过了什么?

vngu2lb8

vngu2lb81#

我最近和你有同样的问题。在SQLServer中一切都很好,但是我在转换成mysql时遇到了很多问题。对我有用的是:

Install-Package MySQL.Data -Version 6.9.9
    Install-Package MySql.Data.Entity -Version 6.9.10

较新的mysql 8.0包似乎有问题。当我恢复到旧版本时,它起了作用。
你的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中也有一些差异,我只是想找出。例如,迁移“index”语句将不起作用。您必须编辑迁移文件并自己构建索引。另一件我刚刚读过但没有遇到的事情是,mysql驱动程序不允许多个连接,这可能意味着改变检索异步集合的方式。最后,我对rowversion是字节[]有一个问题。我使用了本文的一个变体来解决这个问题(希望如此!)。
用efcore和mysql实现row版本的更好方法?

相关问题