Exemplo n.º 1
0
 private static void CheckForData <T>(StoreContext context, bool Any, string url) where T : class
 {
     if (Any)
     {
         var data  = File.ReadAllText(url);
         var items = JsonSerializer.Deserialize <List <T> >(data);
         context.AddRange(items);
     }
 }
Exemplo n.º 2
0
        public static async Task SeedAsync(StoreContext context, ILoggerFactory loggerFactory)
        {
            try
            {
                if (!context.ProductBrands.Any())
                {
                    var brandsData = File.ReadAllText("../Infrastructure/Data/SeedData/brands.json");

                    var brands = JsonSerializer.Deserialize <List <ProductBrand> >(brandsData);

                    context.AddRange(brands);

                    await context.SaveChangesAsync();
                }

                if (!context.ProductTypes.Any())
                {
                    var typesData = File.ReadAllText("../Infrastructure/Data/SeedData/types.json");

                    var types = JsonSerializer.Deserialize <List <ProductType> >(typesData);

                    context.AddRange(types);

                    await context.SaveChangesAsync();
                }

                if (!context.Products.Any())
                {
                    var productsData = File.ReadAllText("../Infrastructure/Data/SeedData/products.json");

                    var products = JsonSerializer.Deserialize <List <Product> >(productsData);

                    context.AddRange(products);

                    await context.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                var logger = loggerFactory.CreateLogger <StoreContextSeed>();
                logger.LogError(ex.Message);
            }
        }
Exemplo n.º 3
0
        //The seed methods will be executed by the API so need to navigate back to the Infrastructure project accordingly

        public static async Task SeedAsync(StoreContext context)
        {
            //The seed data json files are copies to the output files (CopyToOutputDirectory="PreserveNewest" in Infrastructure.csproj)
            var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "/Data/SeedData/";

            // When Seeding to SqlServer, need to switch on IDENTITY_INSERT for ProductBrands, ProductTypes and DeliveryMethods
            // before inserting as all these have their Ids populated in the json files.
            // This MUST be committed within a transaction otherwise the IDENTITY_INSERT option won't work.

            // ProductBrands
            if (!context.ProductBrands.Any())
            {
                using (var trans = context.Database.BeginTransaction())
                {
                    var brandsData = File.ReadAllText(path + "brands.json");

                    var brands = JsonSerializer.Deserialize <ProductBrand[]>(brandsData);
                    context.AddRange(brands);

                    await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.ProductBrands ON");

                    await context.SaveChangesAsync();

                    await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.ProductBrands OFF");

                    await trans.CommitAsync();
                }
            }

            // ProductTypes
            if (!context.ProductTypes.Any())
            {
                using (var trans = context.Database.BeginTransaction())
                {
                    var typesData = File.ReadAllText(path + "types.json");

                    var types = JsonSerializer.Deserialize <ProductType[]>(typesData);
                    context.AddRange(types);

                    await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.ProductTypes ON");

                    await context.SaveChangesAsync();

                    await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.ProductTypes OFF");

                    await trans.CommitAsync();
                }
            }

            // Products
            if (!context.Products.Any())
            {
                var productsData = File.ReadAllText(path + "products.json");
                var products     = JsonSerializer.Deserialize <Product[]>(productsData);
                context.AddRange(products);
                await context.SaveChangesAsync();
            }

            // Delivery Methods
            if (!context.DeliveryMethods.Any())
            {
                using (var trans = context.Database.BeginTransaction())
                {
                    var deliveryData = File.ReadAllText(path + "delivery.json");

                    var deliveryMethods = JsonSerializer.Deserialize <DeliveryMethod[]>(deliveryData);

                    context.AddRange(deliveryMethods);
                    await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.DeliveryMethods ON");

                    await context.SaveChangesAsync();

                    await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.DeliveryMethods OFF");

                    await trans.CommitAsync();
                }
            }
        }