private static void PrintWorkout(FitCoreDbContext ctx) { var user = ctx.Users.Include(w => w.Workouts).FirstOrDefault(); int count = 1; int exerciseCount = 1; int setCount = 1; foreach (var workout in user.Workouts) { Console.WriteLine($"Workout {count++}\n"); foreach (var exercise in workout.Exercises) { Console.WriteLine($"Exercise {exerciseCount++}: {exercise.Exercise.Name}\n"); foreach (var set in exercise.Sets) { Console.WriteLine($"Set {setCount++}: Reps: {set.Reps} Weight: {set.Weight}"); } Console.WriteLine(); setCount = 1; } Console.WriteLine(); } }
static void Main() { var services = new ServiceCollection(); services.AddDbContextPool <FitCoreDbContext>(op => op.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=FitCoreDb.Data;Trusted_Connection=True;MultipleActiveResultSets=true")) .AddTransient <IRepository, FitCoreRepository>(); // C# 8.0 feature // https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/using using var ctx = new FitCoreDbContext(new DbContextOptions <FitCoreDbContext>()); ctx.Database.EnsureDeleted(); ctx.Database.EnsureCreated(); ctx.Exercises.AddRange(Seed.GetExercises()); var workout = TestData.Build_Chest_Workout(); var user = TestData.Build_Athlete(); user.AddWorkouts(workout); ctx.Users.Add(user); ctx.SaveChanges(); // make a full workout and add it to user... TestGraph(ctx); }
private static void TestGraph(FitCoreDbContext ctx) { // get user: var user = ctx.Users.FirstOrDefault(); Console.WriteLine($"Athlete: {user.FirstName} {user.LastName} Date of Birth: {user.Birthdate}"); PrintWorkout(ctx); Console.ReadLine(); }
public void User_Can_Add_Workout_To_Their_Account() { // In-memory database only exists while the connection is open var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); try { var options = new DbContextOptionsBuilder <FitCoreDbContext>() .UseSqlite(connection) .Options; // Create the schema in the database using (var context = new FitCoreDbContext(options)) { context.Database.EnsureCreated(); } // Run the test against one instance of the context using (var context = new FitCoreDbContext(options)) { // add exercise... context.Exercises.Add(TestData.Build_Single_Exercise()); context.Users.Add(TestData.Build_Athlete()); context.SaveChanges(); var workout = TestData.Build_Chest_Workout(); var userService = new UserService(context); var user = context.Users.FirstOrDefault(); user.AddWorkouts(workout); context.SaveChanges(); } // Use a separate instance of the context to verify correct data was saved to database using (var context = new FitCoreDbContext(options)) { var user = context.Users.FirstOrDefault(); Assert.NotNull(user.FirstName); Assert.Equal(1, context.Workouts.Count()); } } finally { connection.Close(); } }
public void Cannot_Add_Workout_To_Repository_Without_A_User() { // In-memory database only exists while the connection is open var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); try { var options = new DbContextOptionsBuilder <FitCoreDbContext>() .UseSqlite(connection) .Options; // Create the schema in the database using (var context = new FitCoreDbContext(options)) { context.Database.EnsureCreated(); } // Run the test against one instance of the context using (var context = new FitCoreDbContext(options)) { // add exercise... //context.Exercises.Add(TestData.Build_Single_Exercise()); var workout = TestData.Build_Chest_Workout(); context.Workouts.Add(workout); Assert.Throws <DbUpdateException>(() => context.SaveChanges()); } // Use a separate instance of the context to verify correct data was saved to database using (var context = new FitCoreDbContext(options)) { Assert.Equal(0, context.Workouts.Count()); } } finally { connection.Close(); } }