我正在编写我的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."