public void Update_GearsOfWar_entities_using_stored_procedures()
        {
            ExtendedSqlAzureExecutionStrategy.ExecuteNew(
                () =>
                {
                    using (new TransactionScope())
                    {
                        using (var context = new GearsOfWarStoredProceduresContext())
                        {
                            var city = context.Cities.OrderBy(c => c.Name).First();
                            city.Location = DbGeography.FromText("POINT(12 23)", DbGeography.DefaultCoordinateSystemId);
                            context.SaveChanges();

                            var tag = context.Tags.OrderBy(t => t.Id).First();
                            tag.Note = "Modified Note";
                            context.SaveChanges();

                            var gear = context.Gears.OrderBy(g => g.Nickname).ThenBy(g => g.SquadId).First();
                            gear.Rank = MilitaryRank.General;
                            context.SaveChanges();

                            var squad = context.Squads.OrderBy(s => s.Id).First();
                            squad.Name = "Modified Name";
                            context.SaveChanges();

                            var weapon = context.Weapons.OrderBy(w => w.Id).First();
                            weapon.Name = "Modified Name";
                            context.SaveChanges();
                        }

                        using (var context = new GearsOfWarStoredProceduresContext())
                        {
                            var city = context.Cities.OrderBy(c => c.Name).First();
                            var tag = context.Tags.OrderBy(t => t.Id).First();
                            var gear = context.Gears.OrderBy(g => g.Nickname).ThenBy(g => g.SquadId).First();
                            var squad = context.Squads.OrderBy(s => s.Id).First();
                            var weapon = context.Weapons.OrderBy(w => w.Id).First();

                            Assert.Equal(12, city.Location.Longitude);
                            Assert.Equal(23, city.Location.Latitude);
                            Assert.Equal("Modified Note", tag.Note);
                            Assert.Equal(MilitaryRank.General, gear.Rank);
                            Assert.Equal("Modified Name", squad.Name);
                            Assert.Equal("Modified Name", weapon.Name);
                        }
                    }
                });
        }
        public ModificationFunctionsEndToEndTests()
        {
            // force database initialization, we don't want this to happen inside transaction
            using (var context = new GearsOfWarStoredProceduresContext())
            {
                context.Database.Delete();
                context.Weapons.Count();
            }

            using (var context = new ArubaStoredProceduresContext())
            {
                context.Database.Delete();
                context.Configs.Count();
            }

            using (var context = new FantasyStoredProceduresContext())
            {
                context.Database.Delete();
                context.Creatures.Count();
            }
        }
        public void Update_Many_to_Many_relationship_using_stored_procedures()
        {
            ExtendedSqlAzureExecutionStrategy.ExecuteNew(
                () =>
                {
                    using (new TransactionScope())
                    {
                        List<int?> usedWeaponIds;
                        List<int?> unusedWeaponIds;
                        using (var context = new GearsOfWarStoredProceduresContext())
                        {
                            var gear = context.Gears.OrderBy(g => g.Nickname).ThenBy(g => g.Squad).First();
                            usedWeaponIds = gear.Weapons.Select(w => w.Id).ToList();

                            var unusedWeapons = context.Weapons
                                .Where(w => !usedWeaponIds.Contains(w.Id)).ToList();

                            unusedWeaponIds = unusedWeapons.Select(w => w.Id).ToList();
                            gear.Weapons = unusedWeapons;
                            context.SaveChanges();
                        }

                        using (var context = new GearsOfWarStoredProceduresContext())
                        {
                            var gear = context.Gears.OrderBy(g => g.Nickname).ThenBy(g => g.Squad).First();
                            Assert.True(gear.Weapons.All(w => unusedWeaponIds.Contains(w.Id)));
                        }
                    }
                });
        }
        public void Delete_GearsOfWar_entities_using_stored_procedures()
        {
            ExtendedSqlAzureExecutionStrategy.ExecuteNew(
                () =>
                {
                    using (new TransactionScope())
                    {
                        using (var context = new GearsOfWarStoredProceduresContext())
                        {
                            var cities = context.Cities.ToList();
                            var gears = context.Gears.ToList();
                            var squads = context.Squads.ToList();
                            var tags = context.Tags.ToList();
                            var weapons = context.Weapons.ToList();

                            context.Cities.RemoveRange(cities);
                            context.Gears.RemoveRange(gears);
                            context.Squads.RemoveRange(squads);
                            context.Tags.RemoveRange(tags);
                            context.Weapons.RemoveRange(weapons);
                            context.SaveChanges();
                        }

                        using (var context = new GearsOfWarStoredProceduresContext())
                        {
                            Assert.Equal(0, context.Cities.Count());
                            Assert.Equal(0, context.Gears.Count());
                            Assert.Equal(0, context.Squads.Count());
                            Assert.Equal(0, context.Tags.Count());
                            Assert.Equal(0, context.Weapons.Count());
                        }
                    }
                });
        }
        public void Delete_GearsOfWar_entities_using_stored_procedures()
        {
            using (var context = new GearsOfWarStoredProceduresContext())
            {
                var cities = context.Cities.ToList();
                var gears = context.Gears.ToList();
                var squads = context.Squads.ToList();
                var tags = context.Tags.ToList();
                var weapons = context.Weapons.ToList();

                context.Cities.RemoveRange(cities);
                context.Gears.RemoveRange(gears);
                context.Squads.RemoveRange(squads);
                context.Tags.RemoveRange(tags);
                context.Weapons.RemoveRange(weapons);
                context.SaveChanges();
            }

            using (var context = new GearsOfWarStoredProceduresContext())
            {
                Assert.Equal(0, context.Cities.Count());
                Assert.Equal(0, context.Gears.Count());
                Assert.Equal(0, context.Squads.Count());
                Assert.Equal(0, context.Tags.Count());
                Assert.Equal(0, context.Weapons.Count());
            }
        }