EF Core 2.0迁移编译报错,需强制使用上下文完整命名空间
解决EF Core 2.0迁移中"ApplicationDbContext是命名空间,但被当作类型使用"的问题
这个问题我之前也碰到过——EF Core 2.0生成迁移时,默认使用上下文的短类型名,刚好和迁移文件所在的Service.Migrations.ApplicationDbContext命名空间重名,导致编译器无法区分你引用的是上下文类型还是这个命名空间,从而抛出错误。下面给你两种解决思路:
方法1:手动修正已生成的迁移文件
找到你刚生成的迁移类文件(比如20180424060822_InitApplicationDbContext.cs),定位到[DbContext(typeof(ApplicationDbContext))]这一行,把括号里的ApplicationDbContext替换成它的完整命名空间+类型名。
举个例子,如果你的ApplicationDbContext实际在Service.Data命名空间下,修改后应该是:
[DbContext(typeof(Service.Data.ApplicationDbContext))]
同时确保文件顶部已经引用了对应的命名空间,或者直接保留完全限定名即可。
方法2:生成迁移时直接指定完整命名空间(推荐)
下次生成迁移时,在dotnet ef命令里用上下文的完整限定名来指定-c参数,这样EF Core会自动在迁移文件中使用完整命名空间,从根源避免冲突。
命令格式如下(替换成你实际的完整命名空间):
dotnet ef migrations add InitApplicationDbContext -c Service.Data.ApplicationDbContext -o Migrations/ApplicationDbContext
额外提醒
如果你的项目里存在和上下文类型同名的命名空间(比如迁移目录的Service.Migrations.ApplicationDbContext),这种命名重合很容易引发混淆。建议要么重命名迁移目录的命名空间,要么在所有涉及上下文的代码和命令中始终使用完整限定名,彻底避免这类冲突。
内容的提问来源于stack exchange,提问作者Thangadurai
相关产品推荐
相关产品推荐

