繁体   English   中英

EF Core 迁移与 SQLite 数据库:无法创建 object 类型

[英]EF Core migration with SQLite database: unable to create object of type

我正在尝试使用 Entity Framework Core 对 SQLite 数据库进行初始迁移。

我的解决方案包含两个项目:控制台应用程序和 Class 库(包含 DbContext 和所有模型)。

DbContext 看起来像这样:

public class SQLite_DbContext : DbContext
{
    public DbSet<DeviceRepresentation> Devices { get; set; }
    public DbSet<FileInfoDatabaseRepresentation> Files { get; set; }

    public SQLite_DbContext(DbContextOptions<SQLite_DbContext> options)
        : base(options)
    {
    }
}

在 class 库(我保存 DbContext 的地方)中,我正在尝试创建迁移:

dotnet ef migrations add InitialCreate

结果,dotnet cli 返回错误:

无法创建类型为“SQLite_DbContext”的 object。 有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728

你能看出这里有什么问题吗?

我可能已经找到了解决方案。 在 docs [here]中生成迁移时,对幕后发生的事情有一个很好的解释。

就我而言,根据文档,EF Core Tools 正在尝试创建一个SQLite_DbContext实例,不向构造函数传递任何参数。 我的代码中没有这样的构造函数,因为只有一个参数( options )。 这就是它“无法创建对象”的原因。 当我从代码中删除我的自定义构造函数时,它开始正确生成迁移。

或者,正如我所看到的,还有一个选项可以控制如何创建 DbContext。 有可能创建 EF 工具将用于生成此 class 的实例的“工厂”:

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

            return new SQLite_DbContext(optionsBuilder.Options);
        }
    }

如果我没记错的话,SQLite 不支持迁移。 如果解决方法可以满足您的需求,您可以关注此帖子https://medium.com/@hoekje/simple-migrations-with-c-and-sqlite-9942e1863536

我遇到了这个错误,我的解决方案也分为两个项目:一个控制台应用程序MyProject.Api和一个 class 库MyProject ,但由于我通过IConfiguration获得我的选项,我无法使用IDesignTimeDbContextFactory解决方案因为它只得到一个string[] args

事实证明,无需创建工厂即可解决问题,解决方案是为dotnet ef命令行提供更多上下文,如下所示:

dotnet ef migrations add InitialCreate --project src/MyProject --startup-project src/MyProject.Api

这将在src/MyProject的根目录创建一个Migrations目录。 如果您想在其他地方创建类(例如在Data/Migrations中),请将此参数添加到命令行: --output-dir Data/Migrations

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM