static void Main(string[] args) { var _dbContext = new PersonHistoryContext(); // method syntax var bornPeopleNames = _dbContext.Person .AsNoTracking() .Where(person => person.Birth.BirthDate < DateTime.Now) .Select(person => person.NameFirst) .ToList(); bornPeopleNames.ForEach(name => Console.WriteLine(name)); // query syntax var bornPeopleNamesQuery = from p in _dbContext.Person.AsNoTracking() where p.Birth.BirthDate < DateTime.Now select p.NameFirst; bornPeopleNamesQuery.ToList().ForEach(name => Console.WriteLine(name)); // get birthday for specific person var johnaldBirthday = _dbContext.Person .AsNoTracking() .Where(person => person.NameFirst == "Johnald") .Select(person => person.Birth.BirthDate) .FirstOrDefault(); Console.WriteLine(johnaldBirthday.ToString()); // what about the whole object? var johnaldBirthdayObject = _dbContext.Person .AsNoTracking() .Where(person => person.NameFirst == "Johnald") .Select(person => person.Birth) .FirstOrDefault(); Console.WriteLine(johnaldBirthdayObject.BirthDate.ToString()); // what if we want Johnald AND his birthday? var johnaldWithBirthday = _dbContext.Person .AsNoTracking() .FirstOrDefault(person => person.NameFirst == "Johnald"); Console.WriteLine(johnaldWithBirthday.NameFirst); if (johnaldWithBirthday.Birth != null) { Console.WriteLine(johnaldWithBirthday.Birth.BirthDate.ToString()); } else { Console.WriteLine("Not quite"); } // this is the way var johnaldWithBirth = _dbContext.Person .AsNoTracking() .Include(person => person.Birth) .FirstOrDefault(person => person.NameFirst == "Johnald"); Console.WriteLine(johnaldWithBirthday.NameFirst); Console.WriteLine(johnaldWithBirth.Birth.BirthDate.ToString()); // still works var johnaldOldSchool = _dbContext.Person .FromSqlRaw($"SELECT * FROM Person p WHERE p.name_first = 'Johnald'") .AsNoTracking() .Single(); Console.WriteLine("Mr. " + johnaldOldSchool.NameLast); // not so much var johnaldOldSchoolQuestionMark = _dbContext.Person .FromSqlRaw($"SELECT p.name_first FROM Person p WHERE p.name_first = 'Johnald'") .AsNoTracking() .Single(); Console.WriteLine("Mr. " + johnaldOldSchoolQuestionMark.NameLast); }
static void Main(string[] args) { // CREATE/READ var dbContext = new PersonHistoryContext(); var johnBirth = new Birth { Id = 1234, // not using generated IDs -> defaults to 0 BirthDate = DateTime.Now }; var john = new Person { Id = 1234, // not using generated IDs -> defaults to 0 NameFirst = "John", NameLast = "Doe", Birth = johnBirth }; dbContext.Add(johnBirth); dbContext.Add(john); var newJohn = dbContext.Person .FirstOrDefault(); dbContext.SaveChanges(); newJohn = dbContext.Person .FirstOrDefault(); // UPDATE var misterDoeBirth = new Birth { Id = 1233, BirthDate = (DateTime.Now).AddYears(-30).AddDays(3) }; var misterDoe = new Person { Id = 1233, NameFirst = "Johnald", NameLast = "Doe", Birth = misterDoeBirth }; newJohn.Father = misterDoe; dbContext.SaveChanges(); newJohn = dbContext.Person .FirstOrDefault(person => person.Id == 1234); Console.WriteLine(newJohn != null ? newJohn.Father.NameFirst : "Luke is not your father"); // DELETE dbContext.Person .Remove(newJohn); dbContext.SaveChanges(); var johnQuestionMark = dbContext.Person .FirstOrDefault(person => person.Id == 1234); Console.WriteLine(johnQuestionMark != null ? "JOHN! You're alive!" : ":rip:"); }