asp.net-core-mvc - 为 dotnet core asp.net 运行 CRUD 脚手架时出错

标签 asp.net-core-mvc entity-framework-core .net-core

所以我正在尝试 .net core 并启动了一个新的 asp.net core 应用程序。我创建了一个 .net core 类库,并包含对 Entity Framework 核心的引用。我已经创建了一个上下文,并且正在尝试在我的 ASP.NET Core 项目中使用此上下文进行搭建。当我尝试搭建脚手架时,我不断遇到此错误:

enter image description here

出于搜索目的,这里是错误消息:

There was an error running the selected code generator:

'There was an error creating/modifying a DbContext, there was no type returned after compiling the new assembly successfully.'

我过去曾多次在其他 asp.net net 项目中使用 Entity Framework ,并且在尝试从应用程序项目之外抽象出 dbContext 时总是遇到问题。但是,这次我无法找到解决方法。

有人见过这个错误吗?我可以提供有关我的 project.json 文件的更多详细信息,但我不会在这篇文章中粘贴大量内容,而是先看看是否有人遇到过这种情况。

当前正在我的网络项目上运行:

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": {
      "version": "1.0.1",
      "type": "build"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
        "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
            "version": "1.0.0-preview2-final",
            "type": "build"
        },
        "DBCONTEXTPROJECT: "1.0.0-*"
  },

  "tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": [
        "portable-net45+win8"
      ]
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

作为一个注释,我尝试将我的 dbContext 项目配置为 .netcore 应用程序,以尝试让迁移也正常工作。无论哪种方式我都会遇到同样的错误。我目前已恢复了这些更改,现在已将 dbContext 项目设置为 .net 标准。

这是我的 dbContext 项目设置:

{
    "version": "1.0.0-*",

    "dependencies": {
        "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
        "NETStandard.Library": "1.6.0"
    },

    "tools": {
        "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
    },
    "frameworks": {
        "netstandard1.6": {}
    }
}

我想我还应该声明我可以完美地运行 DbContext。我已经在数据库上运行了迁移并且可以实际访问数据。

最佳答案

我也遇到了同样的问题。正如您所发现的,当您将数据模型和 DbContext 与 Web 应用程序放在单独的项目(类库)中时,就会出现此问题。我相信这是当前 ASP.NET Core 中的一个错误。我不知道它是否会得到修复,但我已经找到了一个合理的解决方法。

当您尝试在 Visual Studio 中添加新的支架项目时,您会看到“添加 Controller ”对话框。这里的关键是不要从类库中选择 DbContext 作为数据上下文类。相反,单击“加号”按钮在 Web 应用程序项目中创建(临时)新数据上下文(参见下图)。你给它起什么名字并不重要,但我将其命名为 TempDbContext。脚手架将顺利完成。如果您想构建多个模型类,请立即这样做;它将继续使用相同的 TempDbContext。

enter image description here

完成搭建后,从 Web 应用程序中删除 TempDbContext,并替换为类库中正确的 DbContext 引用。查找以下需要修复的项目:

  • 在新的支架 Controller 中,修复 DbContext 类型名称出现的位置
  • 删除 Data 文件夹中的 TempDbContext 文件
  • 从 appsettings.json 中删除 TempDbContext 连接字符串
  • 从 Startup.cs 的 ConfigureServices 方法中删除 AddDbContext 行

关于asp.net-core-mvc - 为 dotnet core asp.net 运行 CRUD 脚手架时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335705/

相关文章:

logging - 如何在记录器中抑制 MVC 信息消息?

c# - 为什么在Nuget上找到的包不是最新版本?

c# - 如何在 EF7 Core 中运行时更改连接字符串?

c# - 如何安全地附加到 ProcessStartInfo.EnvironmentVariables ["PATH"]

c# - 使用 EF Core 2.1 继承进行过滤

c# - textarea asp-for 不显示属性

c# - 如何在 .NET Core 中重定向对程序集的探测?

c# - 如何将作用域服务注入(inject) DbContext?网络核心

.net - EDMX在哪里

c# - `Assert.That` 属性有什么用?