【问题标题】:Database First Error Entity Framework .NET Core数据库第一个错误实体框架 .NET Core
【发布时间】:2016-12-16 18:53:07
【问题描述】:

我正在将旧的类库转换为类库包。这个类库是旧项目的 DAL 层 - 我们将升级到最新的 .NET。

在旧的类库中,我们首先将edmx 文件用于数据库。在新的 .NET 中,对 edmx 的支持已经停止,但我们仍然需要从数据库生成模型 - 因为数据库已经到位。

为此,我遵循此链接中提供的步骤:https://docs.efproject.net/en/latest/platforms/aspnetcore/existing-db.html

所以我所做的是创建了一个新的类库包:

project.json 是这样的:

{
  "version": "1.0.0-*",
  "description": "xPT.DAL Class Library",
  "authors": [ "Dawood" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",
  "frameworks": {
    "net46": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1",
        "System.Collections": "4.0.11",
        "System.Linq": "4.1.0",
        "System.Runtime": "4.1.0",
        "System.Threading": "4.0.11"
      }
    }
  },
  "dependencies": {

  }
}

现在当我安装:Microsoft.EntityFrameworkCore.SqlServer,如上面链接中所述,我收到此错误:

使用这个命令:Install-Package Microsoft.EntityFrameworkCore.SqlServer

错误列表:

这里说:

The dependency Microsoft.Extensions.Caching.Abstractions 1.0.0 in project xPT.DAL does not support framework .NETFramework,Version=v4.6

但是根据文档,这个库应该支持以上所有4.5.1:https://docs.efproject.net/en/latest/providers/sql-server/index.html#supported-platforms

我做错了什么?

【问题讨论】:

  • 似乎缓存仍然只适用于“dnx-XXX”.NET Framework:如果您想在自己的项目中使用这些包,请删除 net46 并添加一个新的 dnx46 TFM 和它应该工作。
  • @BassamAlugili 还是同样的错误:项目 xPT.DAL 中的依赖项 Microsoft.Extensions.Caching.Abstractions 1.0.0 不支持框架 DNX,Version=v4.6。

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


【解决方案1】:

好吧,我花了大约一天的时间才弄明白,所以我在这里发布我遵循的步骤,让我的 Database First 在 Class Project (.NET Core) 中使用 .NET Core Web 应用程序工作。

第 1 步 - 安装 .NET Core

确保您使用的是 .NET Core 而不是 DNX (Hint: You should be able to see the .NET Core option when creating a New Project) - 如果不是从 Here 下载

如果您在安装 .NET Core 时遇到问题(错误类似于未正确安装 Visual Studio 2015 Update 3)- 您可以使用以下命令运行安装:[DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1] -- 这将阻止安装执行 Visual工作室检查Github Issue

第 2 步 - 创建项目

创建一个新的 ASP.NET Core Web 应用程序 --> 然后在下一个屏幕中选择 Web 应用程序

添加一个Class Library (.NET Core) 项目

第 3 步 - 安装 EF 包

打开你的类库project.json文件,粘贴以下内容,然后保存文件:

{
  "version": "1.0.0-*",

  "dependencies": {
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "NETStandard.Library": "1.6.0"
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net46": {
    },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
    }
  }
}

这应该会恢复References下的包

---------------- 或

您可以使用 Nuget 包管理器通过在包管理器控制台中运行以下命令来安装它们

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

注意:一次安装一个包 - 如果安装后出现错误

Microsoft.EntityFrameworkCore.Tools

然后将 project.json 框架部分的内容更改为:

  "frameworks": {
    "net46": {
    },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
    }
  }

第 4 步 - 创建数据库模型

现在要生成数据库,在Package Manager Console 中运行以下命令(不要忘记将连接字符串更改为您的数据库)

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer

这会给你关于启动项目的错误:

为此,您必须将添加到类库的相同引用添加到 .NET Web 应用程序

所以请打开您的project.json 以获取 Web 应用程序,

dependencies 下,添加:

"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

tools 下添加:

"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

进行更改后保存文件。

这就是我的 project.json 的样子

然后再次在包管理器控制台中针对类库运行命令:

如果您尚未将类库的引用添加到 Web App,您将收到此错误:

要解决这个问题,请将您的类库的引用添加到您的 Web 应用中:

终于

再次运行命令 - 在Package Manager Console:

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

这应该在类库中的模型文件夹下创建实体

【讨论】:

    【解决方案2】:

    更新
    看起来您仍在使用 DNX。请升级到 .NET Core(连同 .NET CLI),因为不再支持 DNX。你可以下载.NET Core here


    net46 是桌面 .NET 框架 4.6 的目标框架名字对象 (TMF)。您不需要在该框架上引用诸如Microsoft.CSharpSystem.Collections 之类的包,因为默认情况下它们是完整的.NET 框架的一部分。仅在针对 .NET Standard 版本(例如 netstandard1.6)时才需要这些。

    删除您在net46 下列出的所有依赖项:

    {
      "dependencies": {
        "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0"
      },
    
      "frameworks": {
        "net46": {}
      }
    }
    

    【讨论】:

    • 安装时仍然出现同样的错误:Microsoft.EntityFrameworkCore.SqlServer
    • 我的答案中的 project.json 适用于一个空的类库。你还有其他依赖吗?
    • 否 - 这是一个新的类库包,目前没有类 - 您可以在我在问题中分享的图像中看到整个项目
    • 您认为这是因为 Microsoft SQL Server Data Tools 版本的原因吗?
    • 我明白了。我创建了一个测试项目(.NET Core 类库(包)),它可以工作。
    【解决方案3】:

    !!!!停止使用 DNX!!!!

    ASP.NET Core 1.0.0 did already hit RTM 1 1/2 个月前。

    自 RC2 以来,DNX 不受支持且未维护

    您必须使用 RC1 或更早版本,因为它是最后一个 DNX 版本。

    软件包的 RTM 版本不适用于 RTM!卸载您的 (ASP).NET 5 工具并从 Microsoft 页面安装 .NET Core SDK

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      相关资源
      最近更新 更多