[英].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.