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

2019-08-09 14:19:22 +08:00
 yeqiu
我的一个 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 运行站点的目录,确实是我的项目目录。
3606 次点击
所在节点    .NET
13 条回复
ahjiangwu
2019-08-09 16:48:06 +08:00
如果__MigrationHistory 表的最后一条记录和 Migrations 目录最新的文件名一致的话,还是报错,那最好贴一下报错的内容,不然不太好定位问题
yeqiu
2019-08-09 16:58:04 +08:00
@ahjiangwu #1

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

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

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

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

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

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



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

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

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

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


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

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


具体原因的话,个人猜测,很有可能是 EF 和 Newtonsoft.json 都用静态扩展的方式扩展了同一个类的同一个方法,而这个方法在 Newtonsoft.json 12 版本之前和之后的实现是不一样的,进而导致 MigrationHistory 表的 model 字段与项目中的 model 序列化之后的内容无法匹配,他就一直觉得你需要迁移。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590464

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX