You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:20:33