數據庫第一錯誤實體框架.NET核心

asp.net-core c# entity-framework-core

我正在將舊的類庫轉換為類庫包。這個類庫是舊項目的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

我究竟做錯了什麼?

一般承認的答案

好吧,我花了大約一天的時間來弄明白所以我在這裡發布了我所遵循的步驟,以使我的數據庫首先在具有.NET核心Web應用程序的Class Project (.NET Core)工作。

第1步 - 安裝.NET Core

確保您使用的是.NET Core而不是DNX (Hint: You should be able to see the .NET Core option when creating a New Project) - 如果不是從這裡下載

如果您在安裝.NET Core時遇到問題(錯誤類似於未正確安裝Visual Studio 2015 Update 3) - 您可以使用以下命令運行安裝:[ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] -這將阻止安裝執行Visual Studio檢查Github問題

在此處輸入圖像描述

第2步 - 創建項目

創建一個新的ASP.NET核心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 Package Manager通過在程序包管理器控制台中運行以下命令來安裝它們

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 App

所以打開你的project.json用於Web App,

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的樣子

在此處輸入圖像描述

然後再次在Package Manager Console中針對類庫運行命令:

如果您尚未將類庫的引用添加到Web App,則會收到以下錯誤:

在此處輸入圖像描述

要解決此問題,請將類庫的引用添加到Web App:

在此處輸入圖像描述

最後

再次運行命令 - 在Package Manager Console

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

這應該在類庫中的Models文件夾下創建實體

在此處輸入圖像描述


熱門答案

更新
看起來你還在使用DNX。請升級到.NET Core(以及.NET CLI),因為不再支持DNX。您可以在此處下載.NET Core。


net46是桌面.NET框架4.6的Target Framework Moniker(TMF)。您不需要在該框架上引用Microsoft.CSharpSystem.Collections等軟件包,因為默認情況下它們是完整.NET框架的一部分。只有在針對.NET標準版本(如netstandard1.6時才需要這些版本。

刪除net46下列出的所有net46

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

  "frameworks": {
    "net46": {}
  }
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因