运行MAUI项目时SQLite表Tasks未创建,报SQLite Error 1错误求助
问题:MAUI中EF Core SQLite抛出“no such table: Tasks”异常
运行MAUI程序时出现以下异常:
Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'no such table: Tasks'.''
已按照微软文档步骤安装EF Core、创建模型及数据库,该方法在其他MAUI项目中有效,但当前项目无法自动创建Tasks表。相关代码如下:
TaskContext 代码
using Microsoft.EntityFrameworkCore; using Task = Todo.Models.Task; namespace Todo.Data { class TaskContext : DbContext { public DbSet<Task> Tasks { get; set; } public string DbPath { get; } public TaskContext() { var folder = Environment.SpecialFolder.LocalApplicationData; var path = Environment.GetFolderPath(folder); DbPath = System.IO.Path.Join(path, "ToDo.db"); } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlite($"Data Source={DbPath}"); } }
Task 模型代码
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Todo.Models { public class Task { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string Title { get; set; } public bool IsCompleted { get; set; } } }
解决方法
在TaskContext的构造函数中添加Database.EnsureCreated()调用,即可自动创建数据库及对应表:
修改后的TaskContext构造函数:
public TaskContext() { var folder = Environment.SpecialFolder.LocalApplicationData; var path = Environment.GetFolderPath(folder); DbPath = System.IO.Path.Join(path, "ToDo.db"); // 添加此行确保数据库和表被创建 Database.EnsureCreated(); }
说明
Database.EnsureCreated()会检查数据库是否存在,若不存在则创建数据库及所有对应的表结构;如果数据库已存在,则不会执行任何操作。这适用于不需要数据库迁移的简单场景,能快速解决表未创建的问题。
内容的提问来源于stack exchange,提问作者Woetroe
相关产品推荐
相关产品推荐

