RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 736313
Accepted
nick_n_a
nick_n_a
Asked:2020-10-26 23:12:28 +0000 UTC2020-10-26 23:12:28 +0000 UTC 2020-10-26 23:12:28 +0000 UTC

EF GetDbProviderManifestToken MySql 迁移报错,如何取胜?

  • 772

我在 NuGet 控制台中执行 PM>Enable-Migrations -Force

我捕捉到文本检查上下文是否针对现有数据库...然后是异常

System.NullReferenceException:对象引用未指向对象的实例。到 MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection 连接) 到 System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection 连接) 到 MySql.Data.Entity.MySqlManifestTokenResolver.ResolveManifestToken(DbConnection 连接) 到 System.Data .Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) 到 System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) 到 System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) 到 System.Data。 Entity.Internal.RetryLazy 2.GetValue(TInput 输入) 到 System.Data.Entity.Internal.LazyInternalContext。
在 System.Data.Entity.Internal.LazyInternalContext.get_ModelBeingInitialized() 在 System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext context, XmlWriter writer) 在 System.Data.Entity.Utilities.DbContextExtensions.<>c__DisplayClass1.b__0( XmlWriter w) 到 System.Data.Entity.Utilities.DbContextExtensions.GetModel(Action`1 writeXml) 到 System.Data.Entity.Utilities.DbContextExtensions.GetModel(DbContext context) 到 System.Data.Entity.Migrations.DbMigrator..ctor System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration 配置) 中 System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration migrationsConfiguration) 到 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run() 到 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 到 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 到 System.Data.Entity。 Migrations.Design.ToolingFacade.Run(BaseRunner runner) 到 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(String language, String rootNamespace) 到 System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 中的 >b__0() 对象引用不指向对象的实例。DoCallBack(CrossAppDomainDelegate callBackDelegate)到 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)到 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)到 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(字符串语言, String rootNamespace) in System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0() in System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 对象引用不指向实例的一个对象。DoCallBack(CrossAppDomainDelegate callBackDelegate)到 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)到 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)到 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(字符串语言, String rootNamespace) in System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0() in System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 对象引用不指向实例的一个对象。String rootNamespace) in System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0() in System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 对象引用不指向实例的一个对象。String rootNamespace) in System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0() in System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 对象引用不指向实例的一个对象。

尝试删除迁移文件夹 - 没有帮助。有旧的迁移,但由于某种原因,NuGet 控制台看不到它们。最有可能的是,迁移已经确定,它将有关项目的数据保存在某个地方。

版本 MySql 基础

EFv6.0

VS 2017

如何恢复迁移?还是 EF-MySql 库本身的问题?

mysql
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    nick_n_a
    2020-10-27T18:05:24Z2020-10-27T18:05:24Z

    让我们从 Configuration.cs 开始

    internal sealed class Configuration :   
    DbMigrationsConfiguration<MyProj.Domain.Concrete.MysqlEfDbContext> { ...}
    

    在这里,我们转到 Context 本身

    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class MysqlEfDbContext : DbContext
    {
        public MysqlEfDbContext() : this("MysqlEfDbContext"/*Строка подключения*/){ }
    

    功能,包希望连接字符串中的 MySql 有一个连接字符串,在 en 所以有一个建议更改为 this("server=127.0.0.1;Database=sys;uid=root;pwd=root;Allow User Variables=True") 但是然后我们得到另一个有趣的“功能”。代码停止正常运行(出现奇怪的异常),控制台工作正常。为了摆脱这种情况,您可以编写一个函数,该函数返回 Web 应用程序的别名和控制台的连接字符串。结果是这样的:

    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class MysqlEfDbContext : DbContext
    {    
        public MysqlEfDbContext() :  this(getDBConnectionString("MysqlEfDbContext")) { }
        static string  getDBConnectionString(string connName) {            
            string loc = typeof(MysqlEfDbContext).Assembly.Location;
            string file = getConfigLoc(loc);
                if (!System.IO.File.Exists(file)) {            
                file = loc.Substring(0, loc.LastIndexOf('\\')) + "\\__AssemblyInfo__.ini";                
                using (System.IO.StreamReader rd = new System.IO.StreamReader(file, System.Text.Encoding.Unicode)) file = rd.ReadToEnd();
                if (!(file = file.Split('\0')[1].Replace("file:///", "")).Contains("inetpub")) file = getConfigLoc(file);
                else return connName; // Случай когда Web публикация
            }               
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();            
            doc.Load( file);
            System.Xml.XmlNode node = doc.SelectSingleNode(string.Format("/configuration/connectionStrings/add[@name='{0}']/@connectionString", connName));            
            return (node == null) ? "" : node.InnerText;           
           }
    
        static string getConfigLoc(string location) {
            List<string> dirs = new List<string>(location.Split("\\/".ToCharArray()));
            return string.Join("\\", dirs.GetRange(0, dirs.Count - 4).ToArray()) 
        + "\\MyProj.WebUI\\web.config"; // Добавить папку Web-Приложения
        }
    

    回滚并在工作中,以及三个 NuGet 控制台命令(或 Pkgmgr.exe):Enable-Migrations Add-Migration "Name"、Update-Database Work。

    PS我也有一个奇怪的更新数据库异常

    System.Runtime.Serialization.SerializationException:不允许成员类型“MySql.Data.MySqlClient.MySqlException,MySql.Data,Version=7.0.2.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d”。
    在 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 在 System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) 在 System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force) 在System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0() 在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command) 成员类型“MySql.Data.MySqlClient.MySqlException”不是允许,MySql.Data,版本=7.0.2.0,文化=中性,PublicKeyToken=c5687fc88969c44d"。

    在这种情况下,我建议使用Update-Database -Verbose,那么很明显最后一个 sql 命令导致了异常,那么您需要查看数据库 - 通过更改过程代码来修复错误Up(在迁移中较少Down()见(Migrations 文件夹)。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5