SQLite 错误 1:“没有这样的表:__EFMigrationsHistory”时尝试在 WPF 应用程序中运行第一个 update-database 命令

SQLite Error 1: 'no such table: __EFMigrationsHistory' when trying to run the first update-database command in WPF Application

提问人:tudoooor 提问时间:11/10/2023 更新时间:11/10/2023 访问量:24

问:

当我尝试在我的数据库上应用初始迁移时,我遇到此错误SQLite错误1:“没有这样的表:__EFMigrationsHistory”。

我想指定命令add-migration Initial可以正常工作并创建迁移,但是当我想应用它时,我收到该错误。

我将在下面附上 ApplicationDbContext 的创建。

namespace ToDoListApp.Data;
public class ApplicationDbContext : DbContext
{
    private readonly string _connectionString = ConfigurationManager.AppSettings["Database"];
    public DbSet<Task> Tasks { get; set; }

    public ApplicationDbContext(DbContextOptions options) : base(options)
    {

    }

    public ApplicationDbContext()
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new TasksConfiguration());
    }
}

namespace ToDoListApp.Data;
public class ApplicationDesignTimeDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    private readonly string _connectionString = ConfigurationManager.AppSettings["Database"];

    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var options = new DbContextOptionsBuilder().UseSqlite(_connectionString).Options;

        return new ApplicationDbContext(options);
    }
}
public class TasksConfiguration : IEntityTypeConfiguration<Task>
{
    public void Configure(EntityTypeBuilder<Task> builder)
    {
        builder.HasKey(t => t.Id);

        builder.Property(t => t.Title)
            .HasMaxLength(35)
            .IsRequired();

        builder.Property(t => t.Description)
            .HasMaxLength(200)
            .IsRequired();
    }
}
namespace ToDoListApp;
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    private IServiceProvider _serviceProvider;
    private string _connectionString = @ConfigurationManager.AppSettings["Database"];

    public App()
    {
        ConfigureServices();
    }

    private void ConfigureServices()
    {
        var services = new ServiceCollection();

        services.AddSingleton<TaskWindow>();
        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlite(_connectionString));
        services.AddScoped<IRepository<Task>, TaskRepositoryDatabase>();
        services.AddScoped<IService<Task>, TaskService>();
        services.AddScoped<TaskViewModel>();

        _serviceProvider = services.BuildServiceProvider();
    }

    protected override void OnStartup(StartupEventArgs e)
    {
        var taskWindow = _serviceProvider.GetRequiredService<TaskWindow>();
        taskWindow.DataContext = _serviceProvider.GetRequiredService<TaskViewModel>();

        taskWindow.Show();

        base.OnStartup(e);
    }
}

我已经尝试了我在网上找到的所有东西,但没有任何效果。这就是我现在写这篇文章的原因。

C# .NET WPF SQLite 实体框架核心

评论

0赞 Joe 11/10/2023
我想指定命令add-migration Initial可以正常工作并创建迁移,但是当我想应用它时,我收到该错误。所以包管理器控制台命令对你来说很好用吗?它会将迁移文件夹添加到您的项目中,是这样吗?然后,当您启动并创建对象时,您调用其函数?这就是失败的原因吗?DbContextMigrate()
0赞 tudoooor 11/10/2023
是的,它会将迁移文件夹添加到项目中。但是当我在数据包管理器控制台中使用命令“update-database”时,我收到SQLite错误1:“没有这样的表:__EFMigrationsHistory”
0赞 Joe 11/10/2023
如果刚刚创建了数据库,则无需调用 update-database。只需确保在应用程序启动时调用 .add-migrationMigrate()DbContext
0赞 Joe 11/10/2023
您可以获得一个名为“SQLite and SQL Server Compact Toolbox”的 Visual Studio 扩展。如果你得到它并安装它,它会给你一个小的资源管理器窗口,你可以在其中打开你的SQLite数据库并查看表。当我查看我的表时,我看到了__EFMigrationsHistory表但是我已经对我的进行了多次迁移,所以我希望有历史记录。我不认为一个全新的数据库会有一个(我还没有验证)

答: 暂无答案