gpt4 book ai didi

c# - 使用 SQLite 数据库 : unable to create object of type 进行 EF Core 迁移

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:13 27 4
gpt4 key购买 nike

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

我的解决方案由两个项目组成:控制台应用程序和类库(包含 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)
{
}
}

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

dotnet ef migrations add InitialCreate

因此,dotnet cli 返回错误:

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

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

最佳答案

我可能已经找到了解决方案。在文档 [here] 中对生成迁移时发生的事情进行了很好的解释。 .

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

或者,如我所见,还有一个选项可以控制 DbContext 的创建方式。可以创建“工厂”,EF 工具将使用它来生成此类的实例:

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);
}
}

关于c# - 使用 SQLite 数据库 : unable to create object of type 进行 EF Core 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58271802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com