簡體   English   中英

.Net 6 EF Core DbContext 和模型在單獨的 Class 庫中

[英].Net 6 EF Core DbContext and Models In Separate Class Libary

我有以下項目的解決方案:

  • ASP.NET 核心MVC網站
  • ASP.NET 內核 Web API
  • DAL [包括 DbContext 和 model 類]

網站和 API 都引用了 DAL,並且可以使用它的 dbContext 和 model 類。

這兩個項目都有一個appsettings.json文件,其中包含連接字符串,並且數據庫訪問全部正常。

我無法弄清楚如何添加遷移。

如果我將默認項目設置為 DAL 項目,則會收到此錯誤:

無法創建類型為“myDbContext”的 object。 有關設計時支持的不同模式,請參閱https://go.microsoft.com/fwlink/?linkid=851728

如果我將其設置為 Api 或網站,我會得到:

您的目標項目“網站”與您的遷移程序集“DAL”不匹配。 更改您的目標項目或更改您的遷移程序集。
使用 DbContextOptionsBuilder 更改您的遷移程序集。 例如 options.UseSqlServer(connection, b => b.MigrationsAssembly("website"))。 默認情況下,遷移程序集是包含 DbContext 的程序集。
通過使用 Package 管理器控制台的默認項目下拉列表,或從包含遷移項目的目錄中執行“dotnet ef”,將您的目標項目更改為遷移項目。

我可以找到有關如何為 dbcontect 和模型為 .NET Core 3.1 設置單獨的 class 庫的信息,但我在 .NET 6 上苦苦掙扎。

我試圖按照這個教程

https://garywoodfine.com/using-ef-core-in-a-separate-class-library-project/

但它與 .net 6 不同,所以當我嘗試將 DBContextFactory 創建到底部時出現錯誤,我無法遵循它。 SetBasePath 不是 ConfigurationBuilder 中的定義。 我對 .NET 核心不夠流利,無法弄清楚需要什么。

我的設置與您在網站 api 和 DAL 層上的設置完全相同。

這就是我在網站和 api program.cs 中注冊 DbContext 的方式:

builder.Services.AddDbContext<AppDbContext>(
    options => options.UseSqlServer(config.ConnectionString, sqlOptions => {
        sqlOptions.MigrationsAssembly("App.Entities");}));

這是在 DAL 項目中創建 AppDbContext 的方式:

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    { }

    // Your DbSet entities here
}

然后,當您運行第一個遷移命令“Add-Migration”時,您需要 select package 管理器控制台下拉菜單中的 DAL 項目,它應該會自動使用遷移文件創建遷移文件夾。

您需要在 DAL 項目中安裝以下軟件包:

Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

老實說,需要更多信息來縮小問題范圍。

我認為有兩個可能的問題。

  1. 您沒有在表示層(MVC 和 API)的兩個項目的 program.cs 中使用確切的 DB 上下文。

  2. 您已在 API 或 MVC 上更新了遷移,或者您已對數據庫進行了更改,因此比較不清楚。

如何解決:

  • 確保兩個application.json中的數據庫連接字符串相同

  • 確保在 API 和 MVC 的 Program.cs 中,您添加了來自 DAL 的確切 dbcontext“並且是相同的”。

  • 確保您在 EF 工具、服務器、設計的解決方案中擁有統一的 Nugget package

  • 確保上次遷移中的模型反映了數據庫中可獲得的內容。

  • 確保 Package Manager 控制台已選擇 DAL 作為默認項目,而可以是 MVC 或 API 的啟動項目沒有任何錯誤。

  • 在添加遷移之前,確保 DAL 中的 dbContext 中有一個 dbSet<>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM