私の Windows Phone 8.1 アプリの UWP バージョンを作成しています。このアプリは読み取り専用の SQLite データベースを使用しており、UWP アプリで Entity Framework 7 を使用してアクセスしようとしています。
アプリの最初のページでデータベースを問題なく読み取ることができます。ただし、行の 1 つをタップしてその行の詳細ページ (いくつかの子レコードをフェッチする場所) に移動すると、データベースにアクセスするコードが働いているページ。より奇妙な部分は、デバッガーを使用してコードをステップ実行すると、機能することです。
アプリで Template10 も使用していますが、DB アクセス コードを 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."