[英].Net 6 EF Core DbContext and Models In Separate Class Libary
我有以下項目的解決方案:
網站和 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
老實說,需要更多信息來縮小問題范圍。
我認為有兩個可能的問題。
您沒有在表示層(MVC 和 API)的兩個項目的 program.cs 中使用確切的 DB 上下文。
您已在 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.