繁体   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