V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yeqiu
V2EX  ›  .NET

付费咨询 ef 迁移问题? iis expres 运行的问题?

  •  
  •   yeqiu · 2019-08-09 14:19:22 +08:00 · 3377 次点击
    这是一个创建于 1693 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的一个 mvc 项目引用了 base 类库,这个 base 类库中主要是 ef(code first)、business 和 tools,现在我运行 mvc 项目的时候,抛出了一个需要进行数据库迁移的异常。

    0. 我查看了数据库链接字符串,没有问题。
    1. 我查看了 Migrations 目录(我是手动管理迁移的),和数据库的"__MigrationHistory",最新的迁移文件名称是一样的
    2. 我还有一个 api 项目也引用了这个 base 类库,这个项目运行良好。
    3. 我尝试执行迁移,我执行了 add-migration something 后,名为 something 的迁移文件的 up 和 down 方法都是空的,执行 update-database 之后,迁移虽然更新到数据库了,但是 mvc 项目依然会抛出需要执行迁移的异常。
    4. 我认为可能 bin 目录中的文件没有更新,于是我尝试清理项目,并且手动删除了 bin 文件,再次执行调试的结果是一样的。
    5. 我重启了电脑,再次运行,一样的结果。
    6. 我认为可能是 iis express 运行的目录不是项目所在的目录
    6.1 我查看了 iis express 的配置文件,其中没有发现我运行的站点的配置。
    6.2 我在运行站点时,删除了项目目录 bin 文件夹中的内容,结果站点抛出了没有找到 dll 的错误,可以确定 iis express 运行站点的目录,确实是我的项目目录。
    13 条回复    2022-03-29 18:18:25 +08:00
    ahjiangwu
        1
    ahjiangwu  
       2019-08-09 16:48:06 +08:00   ❤️ 1
    如果__MigrationHistory 表的最后一条记录和 Migrations 目录最新的文件名一致的话,还是报错,那最好贴一下报错的内容,不然不太好定位问题
    yeqiu
        2
    yeqiu  
    OP
       2019-08-09 16:58:04 +08:00
    @ahjiangwu #1

    支持“ xxx ”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库( http://go.microsoft.com/fwlink/?LinkId=238269)。”
    SilencerL
        3
    SilencerL  
       2019-08-09 17:01:15 +08:00   ❤️ 1
    试一下删掉最近一次成功的迁移记录(cs 文件和数据库的那一条记录)
    然后重新 Add-Migration sth. && Update-Database
    yeqiu
        4
    yeqiu  
    OP
       2019-08-09 17:07:02 +08:00
    @SilencerL #3

    操作了之后问题依旧。
    ahjiangwu
        5
    ahjiangwu  
       2019-08-09 17:12:51 +08:00
    让你贴个报错信息,不明白你贴个小白文档链接是几个意思
    yeqiu
        6
    yeqiu  
    OP
       2019-08-09 17:13:53 +08:00
    @ahjiangwu #5

    您可能没有实际操作过 code frist 迁移
    SilencerL
        7
    SilencerL  
       2019-08-09 17:14:34 +08:00
    @yeqiu #4
    之前遇到过类似的问题, 记不清操作流程了..
    随便一个实体类中: 真实的增加一个字段, 然后再迁移一次, 看下生成的迁移文件是不是空的, 以及迁移能否成功.
    SilencerL
        8
    SilencerL  
       2019-08-09 17:16:16 +08:00
    @ahjiangwu #5
    事实上楼主贴的那个就是报错信息
    ahjiangwu
        9
    ahjiangwu  
       2019-08-09 17:21:01 +08:00
    @SilencerL @yeqiu 额。。。错怪楼主了
    code first 肯定是用过,只是从没遇到类似的问题

    楼主几个 DbContext,会不会是多个 DbContext 引起的?
    yeqiu
        10
    yeqiu  
    OP
       2019-08-09 17:23:47 +08:00
    @SilencerL #7

    我试着在 model 中增加了一个属性,生成的迁移文件不是空的,包括后续的迁移也成功执行,数据库中也出现了想要的字段。

    然后我运行 mvc 项目,问题依旧。 崩溃.jpg



    我比较在意我上面提到的第二点
    我还有一个 api 项目也引用了这个 base 类库,这个项目运行良好。

    我完全无法理解这种事情
    yeqiu
        11
    yeqiu  
    OP
       2019-08-09 17:24:29 +08:00
    @ahjiangwu #9

    只有一个 DbContext
    forgottencoast
        12
    forgottencoast  
       2020-03-03 11:57:34 +08:00
    @yeqiu 后来解决了吗?
    yeqiu
        13
    yeqiu  
    OP
       2022-03-29 18:18:25 +08:00   ❤️ 2
    @forgottencoast #12
    @SilencerL #7

    现在才想起来给回复后续,真的是不好意思啊。


    原因已经查到了,当同时使用 EntityFramework ( 6.2 )和 Newtonsoft.json 这两个包时,Newtonsoft.json 这个包的版本必须大于 12 ,否则就会报这个错误。

    我使用的 EF 版本是 6.2 ,我没有测试其他的版本是否有同样的问题。


    具体原因的话,个人猜测,很有可能是 EF 和 Newtonsoft.json 都用静态扩展的方式扩展了同一个类的同一个方法,而这个方法在 Newtonsoft.json 12 版本之前和之后的实现是不一样的,进而导致 MigrationHistory 表的 model 字段与项目中的 model 序列化之后的内容无法匹配,他就一直觉得你需要迁移。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1096 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:47 · PVG 06:47 · LAX 15:47 · JFK 18:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.