代码之家  ›  专栏  ›  技术社区  ›  NoWar

部署通用应用程序后,部署的sqlite数据库为空

  •  1
  • NoWar  · 技术社区  · 6 年前

    我在UWP的sqlite数据库中使用。它有几个表,位于资产文件夹中,并且具有标记为“内容”的生成操作。

    在开发机器时,它工作得很好。 但是在部署到MS Windows 10平板电脑之后,它出现了错误

    sqlite错误1没有这样的表公司

    它对应于代码

    using (MobileContext db = new MobileContext())
    {
       companiesList.ItemsSource = db.Companies.ToList();
       ...
    }
    

    var createdresult=database.ensurerecreated();//它给出了false,所以

    我想是基于 https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.infrastructure.databasefacade.ensurecreated?view=efcore-2.1 该数据库存在。

    我试过了

    optionsBuilder.UseSqlite("Data Source=" + ApplicationData.Current.LocalFolder.Path + @"\Mobile.db");
    
    optionsBuilder.UseSqlite("Data Source=Mobile.db");
    

    有什么线索吗?谢谢!

    p.s.i使用Microsoft.EntityFrameworkCore访问sqlite。

    P.S.2我尝试过这个解决方案 https://social.msdn.microsoft.com/Forums/en-US/1a933b13-09ee-46ec-9045-e2f567b6048c/uwp-sqlite-error-1-no-such-table-name-table?forum=wpdevelop 但它不起作用。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nico Zhu    6 年前

    来源于 official document ,

    UWP应用程序中的连接字符串通常是仅指定 本地文件名 . 它们通常不包含敏感信息,并且不需要在部署应用程序时进行更改。因此,这些连接字符串通常可以留在代码中,如下所示。如果您希望将它们移出代码,那么UWP支持设置的概念

    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
                optionsBuilder.UseSqlite("Data Source=blogging.db");
        }
    }
    

    数据库文件的默认路径是application LocalFolder . 看起来像这样 C:\Users\vxx\AppData\Local\Packages\e045f456-27d9-4966-b639-01e2281b249f_7jxxxxxxxxxx\LocalState . 如果您的配置与上述相同,则在新机器中部署时,db文件的内容为空。

    OP更新

    我刚评论了一些班级的装饰 [Table("Companies")] [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 现在它开始工作了!