private static void DeleteViaStoreProc()
 {
     var keyVal = 7;
     using (var context = new NinjaContext())
     {
         context.Database.Log = Console.WriteLine;
         context.Database.ExecuteSqlCommand("exec DeleteNinjaViaId {0}", keyVal);
         var res = context.SaveChanges();
     }
 }
 private static void ExecuteStoreProc()
 {
     using (var context = new NinjaContext())
     {
         var ninjas = context.Ningas.SqlQuery("exec GetOldNinjas");
         foreach (var ninja in ninjas)
         {
             Console.WriteLine(ninja.Name);
         }
     }
 }
 private static void InsertNinja()
 {
     var ninja = new Ninja()
     {
         Name = "Leonardo",
         ServedInOniwaban = true,
         DateOfBirth = new DateTime(1972, 8, 11),
         ClanId = 1,
     };
     using (var context = new NinjaContext())
     {
         context.Database.Log = Console.WriteLine;
         context.Ningas.Add(ninja);
         context.SaveChanges();
     }
 }
        private static void DeleteNinja()
        {
            var keyVal = 3;
            Ninja ninja = null;
            using (var context = new NinjaContext())
            {
                context.Database.Log = Console.WriteLine;
                ninja = context.Ningas.Find(keyVal);
            }

            using (var context = new NinjaContext())
            {
                context.Database.Log = Console.WriteLine;
                //instead those two lines use state change
                    //context.Ningas.Attach(ninja);
                    //context.Ningas.Remove(ninja);
                context.Entry(ninja).State = EntityState.Deleted;
                context.SaveChanges();

            }
        }
        private static void InsertRelatedData()
        {
            var ninja = new Ninja()
            {
                Name = "Kacy Katanzaro",
                ServedInOniwaban = false,
                DateOfBirth = new DateTime(1990, 1, 14),
                ClanId = 1
            };
            var muscles = new NinjaEquipment()
            {
                Name = "Muscles",
                Type = EquipmentType.Tool
            };
            var spunk = new NinjaEquipment()
            {
                Name = "Spunk",
                Type = EquipmentType.Weapon
            };

            using (var context = new NinjaContext())
            {
                context.Database.Log = Console.WriteLine;
                context.Ningas.Add(ninja);
                ninja.EquipmentOwned.Add(muscles);
                ninja.EquipmentOwned.Add(spunk);
                context.SaveChanges();
            }
        }
        private static void SimpleNinjaGraphQuery()
        {
            using (var context = new NinjaContext())
            {
                context.Database.Log = Console.WriteLine;
                //SAmple 1 : Eager Loading
                /*var ninja = context.Ningas.Include(n => n.EquipmentOwned)
                    .FirstOrDefault(n => n.Name.StartsWith("Kacy"));*/

                //Sample 2 : Explicit Loading
               /* var ninja2 = context.Ningas.FirstOrDefault(n => n.Name.StartsWith("Kacy"));
                Console.WriteLine("Got Ninja " + ninja2.Name);
                //the following lets us to select to which objects we want explicit loading
                context.Entry(ninja2).Collection(n => n.EquipmentOwned).Load();*/

                //Sample 3 : Lazy Loading. this requires the Property to be marked as Virtual in the model
                var ninja3 = context.Ningas.FirstOrDefault(n => n.Name.StartsWith("Kacy"));
                //the following lets us to select to which objects we want explicit loading
                Console.WriteLine("Number of Equipment for Ninja : {0}" , ninja3.EquipmentOwned.Count());

            }
        }
        private static void SimpleQuery()
        {
            using (var context = new NinjaContext())
            {
                var ninja = context.Ningas
                    .Where(n => n.DateOfBirth > new DateTime(1984, 1, 1))
                    .OrderBy(n => n.Name)
                    .Skip(1).Take(1).FirstOrDefault();

                if(ninja != null)
                    Console.WriteLine(ninja.Name);
                else
                {
                    Console.WriteLine("Not Found");
                }

            }
        }
        private static void RetreiveDataWithFind()
        {
            var keyVal = 3;
            using (var context = new NinjaContext())
            {
                context.Database.Log = Console.WriteLine;
                var ninja = context.Ningas.Find(keyVal);
                Console.WriteLine("After Found #1 : " + ninja.Name);

                ninja = context.Ningas.Find(keyVal);
                Console.WriteLine("After Found #2 : " + ninja.Name);
                ninja = null;

            }
        }
 private static void QueryAndUpdateDisconnected()
 {
     Ninja ninja = null;
     using (var context = new NinjaContext())
     {
         context.Database.Log = Console.WriteLine;
         ninja = context.Ningas.FirstOrDefault();
     }
     ninja.ServedInOniwaban = !ninja.ServedInOniwaban;
     using (var context = new NinjaContext())
     {
         context.Database.Log = Console.WriteLine;
         context.Ningas.Attach(ninja);
         context.Entry(ninja).State = EntityState.Modified;
         context.SaveChanges();
     }
 }
 private static void QueryAndUpdate()
 {
     using (var context = new NinjaContext())
     {
         context.Database.Log = Console.WriteLine;
         var ninja = context.Ningas.FirstOrDefault();
         ninja.ServedInOniwaban = !ninja.ServedInOniwaban;
         context.SaveChanges();
     }
 }
        private static void projectQuery()
        {
            using (var context = new NinjaContext())
            {
                context.Database.Log = Console.WriteLine;
                var ninjas = context.Ningas.Select(n => new {n.Name, n.DateOfBirth, n.EquipmentOwned}).ToList();

            }
        }
        public static void NewDbWithSeed()
        {
            Database.SetInitializer(new DropCreateDatabaseAlways<NinjaContext>());
            using (var context = new NinjaContext())
            {
                if (context.Ningas.Any())
                {
                    return;
                }
                var vtClan = context.Clans.Add(new Clan { ClanName = "Vermont Clan" });
                var turtleClan = context.Clans.Add(new Clan { ClanName = "Turtles" });
                var amClan = context.Clans.Add(new Clan { ClanName = "American Ninja Warriors" });

                var j = new Ninja
                {
                    Name = "JulieSan",
                    ServedInOniwaban = false,
                    DateOfBirth = new DateTime(1980, 1, 1),
                    Clan = vtClan

                };
                var s = new Ninja
                {
                    Name = "SampsonSan",
                    ServedInOniwaban = false,
                    DateOfBirth = new DateTime(2008, 1, 28),
                    ClanId = 1

                };
                var l = new Ninja
                {
                    Name = "Leonardo",
                    ServedInOniwaban = false,
                    DateOfBirth = new DateTime(1984, 1, 1),
                    Clan = turtleClan
                };
                var r = new Ninja
                {
                    Name = "Raphael",
                    ServedInOniwaban = false,
                    DateOfBirth = new DateTime(1985, 1, 1),
                    Clan = turtleClan
                };
                context.Ningas.AddRange(new List<Ninja> { j, s, l, r });
                var ninjaKC = new Ninja
                {
                    Name = "Kacy Catanzaro",
                    ServedInOniwaban = false,
                    DateOfBirth = new DateTime(1990, 1, 14),
                    Clan = amClan
                };
                var muscles = new NinjaEquipment
                {
                    Name = "Muscles",
                    Type = EquipmentType.Tool,

                };
                var spunk = new NinjaEquipment
                {
                    Name = "Spunk",
                    Type = EquipmentType.Weapon
                };

                ninjaKC.EquipmentOwned.Add(muscles);
                ninjaKC.EquipmentOwned.Add(spunk);
                context.Ningas.Add(ninjaKC);

                context.SaveChanges();
                context.Database.ExecuteSqlCommand(
                  @"CREATE PROCEDURE GetOldNinjas
                    AS  SELECT * FROM Ninjas WHERE DateOfBirth<='1/1/1980'");

                context.Database.ExecuteSqlCommand(
                   @"CREATE PROCEDURE DeleteNinjaViaId
                     @Id int
                     AS
                     DELETE from Ninjas Where Id = @id
                     RETURN @@rowcount");
            }
        }