【问题标题】:Could not get the reflection type for DbContext无法获取 DbContext 的反射类型
【发布时间】:2018-04-14 02:50:38
【问题描述】:

在 ASP Core 2.0 VS 2017 中构建控制器时,我得到以下信息:

无法获得 DbContext 的反射类型:

BE.Data.ApplicationDbContext 位于 Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.b__6_0() 在 Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(字符串 [] 参数)在 Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.Execute(字符串 [] 参数)在 Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand.Execute(字符串 [] 参数)

这突然发生了,运行相同代码的同事没有遇到这个问题,我尝试过干净的构建,删除每个项目中的 bin 和 obj 文件夹,删除 db,但我似乎仍然无法工作出来了,不胜感激。

型号:

public class SettingType : BaseModel
{
    public int SettingTypeId { get; set; }
    public string SettingTypeDescription { get; set; }
    public string SystemCode { get; set; }
}

【问题讨论】:

  • 您是否在项目中使用了任何 C#7 新功能?
  • @S.Akbari:为什么?我们还没有开始使用它们。这会给 EF 脚手架带来问题吗?
  • @EricJ。我的一个项目遇到了类似的问题,通过替换 C#7 新功能之一解决了这个问题!
  • 您是否将 VS 升级到 v15.3 或更高版本?
  • @S.Akbari 是的。 7.1,我正在使用 public static async Task Main(string[] args) 特性。

标签: c# entity-framework asp.net-core asp.net-core-2.0


【解决方案1】:

当我使用新的 C#7 功能 (expression bodied members and Throw expressions) 时,我也遇到了这个问题,但是通过用 C#6 中的等效代码替换我的代码,它不再给我那个错误了。尝试在没有任何 C#7 新功能的情况下测试您的项目,它可能应该可以正常工作。我不确定是什么原因,但我认为脚手架所依赖的 Roslyn 包还不支持 C#7 新功能。

作为让脚手架与 C#7 一起使用的一种解决方法,我认为您可以通过执行以下操作:

  1. 安装(或更新)NuGet 包Microsoft.CodeAnalysis.CSharp.Workspaces 2.0.0 或更高版本
  2. 然后再次尝试搭建脚手架

【讨论】:

  • VS2019 上的同样问题。为我工作。
  • 与 VS2019 16.6.0 预览版 2.1 相同的问题。为我工作。
  • 在 VS 16.8.2 下的 .Net 5.0 项目中我也发生了同样的事情,这修复了它。删除表达式体成员不起作用,我必须安装 CodeAnalysis.CSharp.Workspaces(版本 3.8)。我应该尝试回到有表情的成员,看看它是否仍然有效。
  • 我添加了表达式 bodied members 并且脚手架仍然有效。
  • 为我工作,安装了最新的 Microsoft.CodeAnalysis.CSharp.Workspaces nuget
【解决方案2】:

当我通过 Scaffold-DbContext 命令生成 EF 模型时出现此错误,并以警告结束。然后首先我纠正了 Scaffold-DbContext 的警告,然后脚手架剃须刀项目工作正常。

【讨论】:

    【解决方案3】:

    尝试搭建 dbContext 时出现歧义。 我尝试再次搭建脚手架,dbcontext 上出现错误。这是对一个术语的模棱两可的使用。 在错误列表中解决这种歧义。它解决了这个问题。

    【讨论】:

      【解决方案4】:

      这件事发生在我身上,只需要在脚手架之后构建项目。 (是的,这是一个基本的事情,但我忘了它哈哈)

      【讨论】:

        【解决方案5】:

        我正在使用 Visual Studio 2019 和 .Net Core 3.1

        我刚刚意识到我在代码中的某个地方使用了unsafe { } 块。我为临时注释了不安全的代码,我可以再次脚手架。

        【讨论】:

          【解决方案6】:

          我遇到了这个问题。我到数据库的连接字符串包含特定于语言的符号(拉脱维亚语),我只是在 2 小时内无法弄清楚。我通过将我的项目文件夹和数据库放在仅包含 ASCII 符号的目录中来修复它。

          也许对某人有用。

          【讨论】:

          • Paldies :) Dėkoju, ačiū
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-16
          • 2012-04-03
          • 2015-09-13
          • 2010-12-20
          • 1970-01-01
          相关资源
          最近更新 更多