public bool SaveChanges()
 {
     return(_ctx.SaveChanges() > 0);
 }
        public async Task SeedAsync()
        {
            _ctx.Database.EnsureCreated();

            var adminRoleExists = await _roleManager.RoleExistsAsync("Admin");

            if (!adminRoleExists)
            {
                var result = await _roleManager.CreateAsync(new IdentityRole("Admin"));

                if (result != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Could not create the admin role.");
                }
            }

            var userRoleExists = await _roleManager.RoleExistsAsync("User");

            if (!userRoleExists)
            {
                var result = await _roleManager.CreateAsync(new IdentityRole("User"));

                if (result != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Could not create the user role.");
                }
            }

            StoreUser admin = await _userManager.FindByEmailAsync("*****@*****.**");

            if (admin == null)
            {
                admin = new StoreUser
                {
                    UserName  = "******",
                    Email     = "*****@*****.**",
                    FirstName = "Alin",
                    LastName  = "Cioabla"
                };

                var addResult = await _userManager.CreateAsync(admin, "P@ssw0rd!");

                if (addResult != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Could not create the admin in seeder!");
                }

                var setRoleResult = await _userManager.AddToRoleAsync(admin, "Admin");

                if (setRoleResult != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Could not set the role admin in seeder!");
                }
            }

            StoreUser user = await _userManager.FindByEmailAsync("*****@*****.**");

            if (user == null)
            {
                user = new StoreUser
                {
                    UserName  = "******",
                    Email     = "*****@*****.**",
                    FirstName = "MrUser",
                    LastName  = "UserUser"
                };

                var addResult = await _userManager.CreateAsync(user, "P@ssw0rd!");

                if (addResult != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Could not create the user in seeder!");
                }

                var setRoleResult = await _userManager.AddToRoleAsync(user, "User");

                if (setRoleResult != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Could not set the role user in seeder!");
                }
            }

            if (!_ctx.Products.Any())
            {
                // Fill with sample data
                var filepath = Path.Combine(_hosting.ContentRootPath, "Data/sampledata.json");
                var json     = File.ReadAllText(filepath);
                var products = JsonConvert.DeserializeObject <IEnumerable <Product> >(json);
                _ctx.Products.AddRange(products);

                var order = _ctx.Orders.Where(o => o.Id == 1).FirstOrDefault();
                if (order == null)
                {
                    var items = new List <OrderItem>()
                    {
                        new OrderItem()
                        {
                            Product   = products.First(),
                            Quantity  = 5,
                            UnitPrice = products.First().Price
                        }
                    };

                    var sampleOrder = new Order()
                    {
                        OrderDate   = DateTime.UtcNow,
                        OrderNumber = "1234",
                        Items       = items,
                        User        = user
                    };

                    _ctx.Orders.Add(sampleOrder);
                }

                _ctx.SaveChanges();
            }
        }