/// <summary> /// Process the changes to the Interest database as specified in the change requests /// </summary> /// <param name="person">Person to associate the interest with</param> /// <param name="changeRequests">Set of changes of the form 'verb:interest' where verb is one of 'Add' or 'Del' for /// add or delete repectively, and the interest is the interest to add or delete.</param> /// <returns>Number of entries in the change list that were processed.</returns> public static async Task <int> ProcessChanges(Person person, List <string> changeRequests, PeopleSearchContext context) { int numberChanged = 0; Person dbPerson = context.Person.Where(entry => entry.PersonId == person.PersonId).Single(); foreach (string change in changeRequests) { string[] parts = change.Split(":"); if (parts.Length == 2) { string verb = parts[0]; string interest = parts[1]; switch (verb) { case "Add": context.Interest.Add(new Interest { Person = dbPerson, TheInterest = interest }); numberChanged++; break; case "Del": context.Interest.RemoveRange( context.Interest.Where(entry => entry.Person == dbPerson && entry.TheInterest.ToLower() == interest.ToLower())); numberChanged++; break; default: MessageHandler.Error($"Invalid verb ({verb}) in Interest change list"); break; } } } // FOREACH entry in the change requests list await context.SaveChangesAsync(); return(numberChanged); }
/// <summary> /// Seed the Database /// </summary> /// <param name="serviceProvider"></param> public static void Initialize(DbContextOptions <ImageContext> imageDbOptions, DbContextOptions <PeopleSearchContext> peopleDbContext) { Image imageUnknown; Image imageRichard; Image imageTrent; // Create the Image Database Entries // Using the Context object using (var context = new ImageContext(imageDbOptions)) { // Check for anybody already in the database if (context.Image.Any()) { // Database already seeded, exit return; } // Create Images imageUnknown = new Image(@".\SeedData\Unknown.jpg") { Id = "0" }; imageRichard = new Image(@".\SeedData\Richard.jpg") { NumberPeopleAssignedTo = 1 }; imageTrent = new Image(@".\SeedData\Trent.jpg") { NumberPeopleAssignedTo = 1 }; context.Image.AddRange(imageUnknown, imageRichard, imageTrent); context.SaveChanges(); } // Using the Context object using (var context = new PeopleSearchContext(peopleDbContext)) { // Check for anybody already in the database if (context.Person.Any()) { // Database already seeded, exit return; } Person richard = new Person { FirstName = "Richard", LastName = "Bousman", BirthDate = new DateTime(1990, 10, 17), ImageGUID = imageRichard.Id, AddressLine1 = "2880 Sandestin", AddressLine2 = "", City = "Reno", StateOrTerritory = "Nevada", ZipCode = "89523", Country = "USA" }; Person trent = new Person { FirstName = "Trent", LastName = "Wignall", BirthDate = new DateTime(1989, 6, 19), ImageGUID = imageTrent.Id, AddressLine1 = "Corner Office", AddressLine2 = "3165 Millrock Dr", City = "Salt Lake City", StateOrTerritory = "Utah", ZipCode = "84121", Country = "USA" }; Person fred = new Person { FirstName = "Fred", LastName = "Flinestone", BirthDate = new DateTime(0001, 5, 4), ImageGUID = imageUnknown.Id, AddressLine1 = "245 Rock Blvd", AddressLine2 = "", City = "Bedrock", StateOrTerritory = "Stonehenge", ZipCode = "00000", Country = "Prehistoric" }; // Add some People context.Person.AddRange(richard, trent, fred); context.Interest.AddRange( new Interest { Person = richard, TheInterest = "Programming" }, new Interest { Person = richard, TheInterest = "Baseball" }, new Interest { Person = trent, TheInterest = "Personnel" }, new Interest { Person = trent, TheInterest = "Cycling" }, new Interest { Person = fred, TheInterest = "Rock Climbing" } ); // Save new entries to database, assigning personId's context.SaveChanges(); } }