MAUI iOS发布版中EntityFramework Core无法创建SQLite数据库并加载初始数据的问题求助
MAUI iOS发布版中EntityFramework Core无法创建SQLite数据库并加载初始数据的问题求助
各位开发者好,我遇到一个非常困扰的问题:我正在开发的MAUI应用,在Android设备、iOS模拟器上都能正常创建SQLite数据库并填充初始数据,但切换到iOS真机的Release构建版本后,数据库里就完全没有数据,连预先填充的初始条目都看不到。我使用的是Entity Framework Core来处理数据库操作。
背景与前期处理
最开始我用的是独立的SQLite NuGet包,后来切换到EF Core后,已经彻底清理了所有旧的SQLite相关包,只保留EF Core安装时自动引入的依赖,避免出现版本冲突问题。
核心代码结构
我定义的DbContext类如下:
internal class MyDbContext : DbContext { public MyDbContext() { SQLitePCL.Batteries_V2.Init(); this.Database.EnsureCreated(); } public DbSet<Entity1> Entities1 { get; set; } public DbSet<Entity2> Entities2 { get; set; } public DbSet<Entity3> Entities3 { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyDatabase.db3"); optionsBuilder .UseSqlite($"Filename={dbPath}"); } }
同时写了一个供业务控制器继承的基础控制器类:
internal abstract class ControllerBase<T> where T : IDBItem, new() { protected IMapper _mapper; /// <summary> /// Use only in case of unavoidable execution of raw sql /// </summary> protected MyDbContext GetContext() => new MyDbContext(); public ControllerBase() { var config = new MapperConfiguration(cfg => { cfg.AddProfile<DefaultMappingProfile>(); }); _mapper = config.CreateMapper(); } }
实体类的结构示例(带有主键特性):
[PrimaryKey("Id")] public class Entity1: IDBItem { public int Id { get; set; } public string Name { get; set; } public float SomeField { get; set; } }
诡异的现象
每次业务类通过GetContext()获取上下文时,都会触发EnsureCreated()检查数据库是否存在并创建,这一逻辑在Android上完全正常。iOS模拟器上也能正常看到数据库里的初始数据,但iOS真机的Release版本里就是没有任何数据,这点真的让我摸不着头脑。
已尝试的无效方案
- 彻底清理并重新安装NuGet包:移除所有旧的SQLite相关包,只保留EF Core及其依赖,问题依然存在。
有没有大佬能给点排查思路或者解决方案?万分感谢!
备注:内容来源于stack exchange,提问作者Sergey Ivanov
相关产品推荐
相关产品推荐

