} // calling stored procedure #endregion #region Check if database is created private void CheckIsDatabaseCreated() { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { hamsterDb.Database.Migrate(); } }
private async Task PickUpFromCages() { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { var taskOne = Task.Run(() => NullifyHamsters()); var taskTwo = Task.Run(async() => { var hamsters = hamsterDb.Hamsters.ToList(); var activityId = hamsterDb.Activities.Where(a => a.ActivityName == "Departure") .Select(a => a.Id).Single(); var taskList = new List <Task>(); for (int i = 0; i < hamsters.Count(); i++) { var addActivityLogTask = CreateAddActivityLog(activityId, hamsters[i].Id); taskList.Add(addActivityLogTask); } await Task.WhenAll(taskList); hamsterDb.SaveChanges(); }); var taskArray = new Task[] { taskOne, taskTwo }; await Task.WhenAll(taskArray); } }
private async Task TryRemoveFromExerciseArea(Hamster hamster, int activityId) { await Task.Run(() => { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { var theExerciseArea = hamsterDb.ExerciseAreas.First(); var theHamster = hamsterDb.Hamsters.Where(h => h.Id == hamster.Id).First(); hamster.ExerciseAreaId = null; theExerciseArea.CageSize--; var addCageActivityLogTask = CreateAddActivityLog(activityId, theHamster.Id); theHamster.CageId = hamsterDb.Cages.Where(c => c.CageSize < 3 && c.CageSize > 0 && c.Hamsters.First().IsFemale == theHamster.IsFemale || c.CageSize == 0) .Select(c => c.Id).First(); var cage = hamsterDb.Cages.Where(c => c.Id == theHamster.CageId).First(); cage.CageSize++; hamsterDb.SaveChanges(); } }); }
private async Task NullHamster() { await Task.Run(() => { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { hamsterDb.Database.ExecuteSqlRaw("EXEC NullHamsterForNewSimulation"); // calling a stored procedure made in EF with migration hamsterDb.SaveChanges(); } }); } // calling stored procedure
private void OnSendSimulationSummary() { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { var activityLogsPerHamster = hamsterDb.ActivityLogs.Where(a => a.SimulationId == currentSimulationId).AsEnumerable().GroupBy(h => h.HamsterId) .OrderBy(h => h.Key).ToList(); var hamsters = hamsterDb.Hamsters.ToList(); SendSimulationSummary?.Invoke(this, new SimulationSummaryEventArgs(elapsedTicks, elapsedDays, currentSimulationId, currentSimulationDate, activityLogsPerHamster, hamsters)); } }
/// <summary> /// Gets all days that are connected to the specific simulation-id. /// "How many days did the simulation run for?" /// </summary> /// <param name="simulationId"></param> /// <returns>List<string> including every day the simulation ran for</returns> public List <string> GetAllDays(int simulationId) { List <string> allDays = new List <string>(); using (HamsterDbContext hamsterDb = new HamsterDbContext()) { var allDaysIGrouping = hamsterDb.ActivityLogs.Where(s => s.SimulationId == simulationId) .AsEnumerable().GroupBy(t => t.TimeStamp.Day).ToList(); allDays = allDaysIGrouping.Select(t => t.Key.ToString()).ToList(); } return(allDays); }
private async Task CreateAddActivityLog(int activityId, int hamsterId) { await Task.Run(() => { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { hamsterDb.ActivityLogs.Add(new ActivityLog { ActivityId = activityId, HamsterId = hamsterId, SimulationId = currentSimulationId, TimeStamp = currentSimulationDate }); hamsterDb.SaveChanges(); } }); }
/// <summary> /// Gets all ActivityLogs connected to each hamster specificed to a specific simulation. /// </summary> /// <param name="totalDays"></param> /// <param name="simulationId"></param> /// <returns>Uses the SimulationSummaryEventArgs as a return type to include the data /// needed to create reports about the hamsters for the whole run of days that the simulation /// ran with the specific simulation-id</returns> public SimulationSummaryEventArgs GetAllActivityLogsPerSimulation(int totalDays, int simulationId) { List <IGrouping <int, ActivityLog> > activityLogsPerHamster; List <Hamster> hamsters = new List <Hamster>(); using (HamsterDbContext hamsterDb = new HamsterDbContext()) { activityLogsPerHamster = hamsterDb.ActivityLogs.Where(a => a.SimulationId == simulationId).AsEnumerable().GroupBy(h => h.HamsterId) .OrderBy(h => h.Key).ToList(); hamsters = hamsterDb.Hamsters.ToList(); } return(new SimulationSummaryEventArgs(0, totalDays, simulationId, DateTime.Now, activityLogsPerHamster, hamsters)); }
private void OnSendTickInfo() { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { var hamstersInCages = hamsterDb.Hamsters.Where(h => h.CageId != null).AsEnumerable().GroupBy(c => c.CageId).ToList(); var hamstersInExerciseArea = hamsterDb.Hamsters.Where(h => h.ExerciseAreaId != null).ToList(); var tickSpecificActivityLogs = hamsterDb.ActivityLogs.Where(a => a.TimeStamp == currentSimulationDate && a.SimulationId == currentSimulationId) .Include(a => a.Activity) .OrderBy(a => a.Id).ToList(); SendTickInfo?.Invoke(this, new TickInfoEventArgs(elapsedTicks, elapsedDays, currentSimulationId, currentSimulationDate, hamstersInCages, hamstersInExerciseArea, tickSpecificActivityLogs)); } }
private async Task CreateAddSimulation() { await Task.Run(() => { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { hamsterDb.Simulations.Add(new Simulation { Name = "Temp" }); hamsterDb.SaveChanges(); var currentSimulation = hamsterDb.Simulations.OrderBy(s => s.Id).Last(); currentSimulation.Name = $"Simulation {currentSimulation.Id}- " + DateTime.Now.ToString(); currentSimulationId = currentSimulation.Id; hamsterDb.SaveChanges(); } }); }
} // calling stored procedure private async Task NullCageSize <T>(T cageType) { await Task.Run(() => { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { if (cageType.GetType() == typeof(Cage)) { hamsterDb.Database.ExecuteSqlRaw("EXEC NullCageCageSize"); // calling a stored procedure made in EF with migration } else if (cageType.GetType() == typeof(ExerciseArea)) { hamsterDb.Database.ExecuteSqlRaw("EXEC NullExerciseAreaCageSize"); // calling a stored procedure made in EF with migration } hamsterDb.SaveChanges(); } }); } // calling stored procedure
private async Task ArrivalOfHamsters() { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { var hamstersWithNoCage = hamsterDb.Hamsters.ToList(); hamstersWithNoCage = hamstersWithNoCage.Shuffle().ToList(); var cages = hamsterDb.Cages.Include(h => h.Hamsters).ToList(); var arrivalActivityId = hamsterDb.Activities.Where(a => a.ActivityName == "Arrived") .Select(a => a.Id).SingleOrDefault(); var cageActivityId = hamsterDb.Activities.Where(a => a.ActivityName == "Cage") .Select(a => a.Id).SingleOrDefault(); DateTime tempCurrentSimDate = new DateTime(); tempCurrentSimDate = currentSimulationDate; var taskList = new List <Task>(); for (int i = 0; i < hamstersWithNoCage.Count(); i++) { hamstersWithNoCage[i].CageId = cages.Where(c => c.CageSize < 3 && c.CageSize > 0 && c.Hamsters.First().IsFemale == hamstersWithNoCage[i].IsFemale || c.CageSize == 0) .Select(c => c.Id).FirstOrDefault(); var cage = cages.Where(c => c.Id == hamstersWithNoCage[i].CageId).Single(); cage.CageSize++; hamstersWithNoCage[i].CheckedInTime = tempCurrentSimDate; hamsterDb.SaveChanges(); var addArrivalActivityLogTask = CreateAddActivityLog(arrivalActivityId, hamstersWithNoCage[i].Id); taskList.Add(addArrivalActivityLogTask); var addCageActivityLogTask = CreateAddActivityLog(cageActivityId, hamstersWithNoCage[i].Id); taskList.Add(addCageActivityLogTask); } await Task.WhenAll(taskList); hamsterDb.SaveChanges(); } }
/// <summary> /// Gets all ActivityLogs connected to each hamster specificed to a particular /// day and a specific simulation. /// </summary> /// <param name="day"></param> /// <param name="simulationId"></param> /// <returns>Uses the DayInfoEventArgs as a return type to include the data /// needed to create reports about the hamsters in the particular day with /// the specific simulation-id</returns> public DayInfoEventArgs GetAllActivityLogsPerDay(int day, int simulationId) { List <IGrouping <int, ActivityLog> > activityLogsPerHamster; List <Hamster> hamsters = new List <Hamster>(); DateTime currentDate = new DateTime(); using (HamsterDbContext hamsterDb = new HamsterDbContext()) { activityLogsPerHamster = hamsterDb.ActivityLogs.Where(a => a.TimeStamp.Day == day && a.SimulationId == simulationId).AsEnumerable().GroupBy(h => h.HamsterId) .OrderBy(h => h.Key).ToList(); hamsters = hamsterDb.Hamsters.ToList(); currentDate = hamsterDb.ActivityLogs.Where(a => a.TimeStamp.Day == day && a.SimulationId == simulationId) .Select(t => t.TimeStamp).First(); } return(new DayInfoEventArgs(0, day, simulationId, currentDate, activityLogsPerHamster, hamsters)); }
/// <summary> /// Gets all Simulations that are registered in the database /// </summary> /// <returns>List<string> including the names of the simulations in the database</returns> public List <string> GetAllSimulations() { List <string> allSimulations = new List <string>(); using (HamsterDbContext hamsterDb = new HamsterDbContext()) { if (hamsterDb.Database.CanConnect()) { allSimulations = hamsterDb.Simulations.Where(s => s.ActivityLogs.Count() > 0) .OrderByDescending(s => s.Id) .Select(s => s.Name).ToList(); } } if (allSimulations == null) { return(new List <string>()); } return(allSimulations); }
private async Task MoveToExerciseArea() { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { var exerciseArea = hamsterDb.ExerciseAreas.First(); var activityId = hamsterDb.Activities.Where(a => a.ActivityName == "Cage") .Select(a => a.Id).First(); if (exerciseArea.CageSize != 0) { var hamstersInExerciseArea = hamsterDb.Hamsters.Where(h => h.ExerciseAreaId != null).Include(h => h.ExerciseArea).ToList(); TimeSpan timeUntilEndOfDay = new DateTime(currentSimulationDate.Year, currentSimulationDate.Month, currentSimulationDate.Day, 17, 0, 0) - currentSimulationDate; TimeSpan timeSpan = currentSimulationDate - hamstersInExerciseArea.First().LastExerciseTime.Value; if (timeSpan.TotalMinutes >= 60) { if (timeUntilEndOfDay.TotalMinutes >= 60 || timeUntilEndOfDay.TotalMinutes == 6) { for (int i = 0; i < hamstersInExerciseArea.Count(); i++) { await TryRemoveFromExerciseArea(hamstersInExerciseArea[i], activityId); } hamsterDb.SaveChanges(); await TryAddToExerciseArea(); } } } else { await TryAddToExerciseArea(); } } }
private async Task TryAddToExerciseArea() { using (HamsterDbContext hamsterDb = new HamsterDbContext()) { TimeSpan timeUntilEndOfDay = new DateTime(currentSimulationDate.Year, currentSimulationDate.Month, currentSimulationDate.Day, 17, 0, 0) - currentSimulationDate; if (timeUntilEndOfDay.TotalMinutes != 6) { var exerciseArea = hamsterDb.ExerciseAreas.First(); var activityId = hamsterDb.Activities.Where(a => a.ActivityName == "Exercise") .Select(a => a.Id).First(); var hamstersNotInExerciseArea = hamsterDb.Hamsters.Where(c => c.ExerciseAreaId == null) .OrderBy(t => t.LastExerciseTime) .ThenBy(t => t.LastExerciseTime.HasValue) .Select(c => c).ToList(); List <Hamster> hamstersToAdd = new List <Hamster>(); var hamstersNeverExercised = hamstersNotInExerciseArea.Where(t => t.LastExerciseTime.HasValue == false).ToList(); var amountNeverExercised = 0; if (hamstersNeverExercised != null) { amountNeverExercised = hamstersNeverExercised.Count(); } else { amountNeverExercised = 0; } if (amountNeverExercised == hamsterDb.Hamsters.Count()) { hamstersNeverExercised = hamstersNeverExercised.Shuffle().ToList(); hamstersToAdd = hamstersNeverExercised.Where(c => c.IsFemale == hamstersNeverExercised.First().IsFemale) .Take(6).ToList(); } else { hamstersToAdd = hamstersNotInExerciseArea.Where(c => c.IsFemale == hamstersNotInExerciseArea.First().IsFemale) .Take(6).ToList(); } var taskList = new List <Task>(); for (int i = 0; i < hamstersToAdd.Count(); i++) { var cage = hamsterDb.Cages.Where(c => c.Id == hamstersToAdd[i].CageId).First(); hamstersToAdd[i].CageId = null; cage.CageSize--; hamstersToAdd[i].ExerciseAreaId = exerciseArea.Id; exerciseArea.CageSize++; var addActivityLogTask = CreateAddActivityLog(activityId, hamstersToAdd[i].Id); taskList.Add(addActivityLogTask); hamstersToAdd[i].LastExerciseTime = currentSimulationDate; hamsterDb.SaveChanges(); } await Task.WhenAll(taskList); hamsterDb.SaveChanges(); } } }