From f9a03e83e93ae7742293ad03ed55b52a0acd3514 Mon Sep 17 00:00:00 2001 From: Kiran Challa Date: Wed, 23 Sep 2015 13:20:49 -0700 Subject: [PATCH] Fix the way data is seeded to prevent using disposed ef contexts --- src/MusicStore/Models/SampleData.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/MusicStore/Models/SampleData.cs b/src/MusicStore/Models/SampleData.cs index fa214fe44a..f1799c8577 100644 --- a/src/MusicStore/Models/SampleData.cs +++ b/src/MusicStore/Models/SampleData.cs @@ -20,8 +20,10 @@ namespace MusicStore.Models public static async Task InitializeMusicStoreDatabaseAsync(IServiceProvider serviceProvider, bool createUsers = true) { - using (var db = serviceProvider.GetService()) + using (var serviceScope = serviceProvider.GetRequiredService().CreateScope()) { + var db = serviceScope.ServiceProvider.GetService(); + if (await db.Database.EnsureCreatedAsync()) { await InsertTestData(serviceProvider); @@ -50,13 +52,15 @@ namespace MusicStore.Models { // Query in a separate context so that we can attach existing entities as modified List existingData; - using (var db = serviceProvider.GetService()) + using (var serviceScope = serviceProvider.GetRequiredService().CreateScope()) { + var db = serviceScope.ServiceProvider.GetService(); existingData = db.Set().ToList(); } - using (var db = serviceProvider.GetService()) + using (var serviceScope = serviceProvider.GetRequiredService().CreateScope()) { + var db = serviceScope.ServiceProvider.GetService(); foreach (var item in entities) { db.Entry(item).State = existingData.Any(g => propertyToMatch(g).Equals(propertyToMatch(item))) @@ -120,8 +124,8 @@ namespace MusicStore.Models private static Album[] GetAlbums(string imgUrl, Dictionary genres, Dictionary artists) { - var albums = new Album[] - { + var albums = new Album[] + { new Album { Title = "The Best Of The Men At Work", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Men At Work"], AlbumArtUrl = imgUrl }, new Album { Title = "...And Justice For All", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, new Album { Title = "עד גבול האור", Genre = genres["World"], Price = 8.99M, Artist = artists["אריק אינשטיין"], AlbumArtUrl = imgUrl },