在UWP应用程序上查询SQLite数据库时,EF7会抛出异常

时间:2016-04-07 12:46:57

标签: sqlite win-universal-app entity-framework-core template10

我正在编写我的Windows Phone 8.1应用程序的UWP版本。这个应用程序使用只读的SQLite数据库,我试图在UWP应用程序上使用Entity Framework 7来访问它。

我可以在应用的初始页面中正确阅读数据库。但是,一旦我点击其中一行以导航到该行的详细信息页面(我获取一些子记录),我得到一个例外,说明没有配置数据库提供程序,即使访问数据库的代码是与在工作的页面中相同。更奇怪的是,如果我使用调试器逐步执行代码,它就可以工作。

我也在我的应用上使用了Template10,但是我将数据库访问代码放在Template10 ViewModel中还是直接放在视图的代码隐藏中也没有区别。

这是OnConfiguring课程的DbContext方法:

    protected async override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var assetsFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets");
        optionsBuilder.UseSqlite($"Filename={Path.Combine(assetsFolder.Path, "joinbus.db")}");
    }

这就是我在应用程序初始页面上访问数据库的方式(总是有效):

    public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
        using (var db = new JoinbusContext())
        {
            Lines = await db.Lines.ToListAsync();
        }
    }

这是我在详细信息页面上访问数据库的方式(仅在调试时有效):

    public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
        var line = parameter as Line;
        using (var db = new JoinbusContext())
        {
            var origins = await db.LineOrigins.Where(lo => lo.Line.Id == line.Id)
                .Include(lo => lo.Origin).ToListAsync();
            LineOrigins = origins;
        }
    }

抛出的异常为System.InvalidOperationException,邮件为"No database providers are configured. Configure a database provider by overriding OnConfiguring in your DbContext class or in the AddDbContext method when setting up services."

0 个答案:

没有答案