类库中的C# Datacontext

问题描述 投票:0回答:1

我想如果能把我的数据库类从NET.Core项目中移到类库中就更好了。

我有一个叫做 ApiRegistrationDataContext继承自 DbContext 和类 ApiRegistrationSqliteDataContext继承自 ApiRegistrationDataContext.

在ASP.Core-project中,我有一些关于数据库类的行,在文件 Startup.cs 并在一个服务中。我将通过 Add-Migration SomeName -Context ApiRegistrationSqliteDataContext -OutputDir Migrations\ApiRegistrationSqliteMigrations.

现在我把这些类移到了一个类库中,并从ASP.Core项目中删除了所有连接。但是现在我无法创建一个新的迁移(我可以将旧的迁移从ASP.Core项目移到类库中)。

错误信息如下

Unable to create an object of type 'ContactDataContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

为什么在ASP.Core项目中可以使用,而在我的类库中却不能使用了?

c# entity-framework asp.net-core migration class-library
1个回答
1
投票

作为 文件 状态。

EF核心工具的一些命令(例如Migrations命令)需要在设计时创建一个派生的DbContext实例,以便收集有关应用程序的实体类型以及它们如何映射到数据库模式的细节。

所以在你的改变之后,EF无法做到这一点。其中一个选择是在设计时创建 IDesignTimeDbContextFactory 内的相应项目。

public class ApiRegistrationSqliteDataContextContextFactory : IDesignTimeDbContextFactory<ApiRegistrationSqliteDataContext>
{
    public ApiRegistrationSqliteDataContext CreateDbContext(string[] args)
    {
       var optionsBuilder = new DbContextOptionsBuilder<ApiRegistrationSqliteDataContext>();
            optionsBuilder.UseSqlite("Data Source=blog.db");

       return new ApiRegistrationSqliteDataContext(optionsBuilder.Options);
    }
}  

如果你正在使用VS包管理器控制台来处理迁移,请确保你已经设置了正确的启动项目(在解决方案资源管理器中)和默认项目(在包管理器控制台中)。

也可以尝试运行Add-Migration,并指定 Verbose 旗帜。

Add-Migration SomeName -Context ApiRegistrationSqliteDataContext -OutputDir Migrations\ApiRegistrationSqliteMigrations -Verbose
© www.soinside.com 2019 - 2024. All rights reserved.