public void CreateNewProjectWithPhotograph() { var dbContextScopeFactory = new DbContextScopeFactory(); var ambientDbContextLocator = new AmbientDbContextLocator(); var projectRepository = new ProjectRepository(ambientDbContextLocator); var photographs = new List<Photograph>(); photographs.Add(new Photograph { Location="home", Title="photo title" }); photographs.Add(new Photograph { Location = "home2", Title = "photo title2" }); var projectService = new ProjectServices(dbContextScopeFactory, projectRepository); Project project = new Project { Description = "test", Title = "Test title", Photographs = photographs }; projectService.CreateProject(project); }
public void DeletePhotograph() { CreateANewPhotograph(); var dbContextScopeFactory = new DbContextScopeFactory(); var ambientDbContextLocator = new AmbientDbContextLocator(); var photographRepository = new PhotographRepository(ambientDbContextLocator); var photographService = new PhotographServices(dbContextScopeFactory, photographRepository); //var userQueryService = new UserQueryService(dbContextScopeFactory, userRepository); //var userEmailService = new UserEmailService(dbContextScopeFactory); //var userCreditScoreService = new UserCreditScoreService(dbContextScopeFactory); Assert.IsTrue(photographService.RemovePhotography((new Photograph { PhotographId = Guid.Empty }))); }
public void CreateANewPhotograph() { var dbContextScopeFactory = new DbContextScopeFactory(); var ambientDbContextLocator = new AmbientDbContextLocator(); var photographRepository = new PhotographRepository(ambientDbContextLocator); var photographService = new PhotographServices(dbContextScopeFactory, photographRepository); //var userQueryService = new UserQueryService(dbContextScopeFactory, userRepository); //var userEmailService = new UserEmailService(dbContextScopeFactory); //var userCreditScoreService = new UserCreditScoreService(dbContextScopeFactory); Photograph newPhoto = new Photograph(); newPhoto.Location = "testlocation"; Assert.IsTrue(photographService.UploadPhotography(newPhoto)); Guid uploadID = newPhoto.PhotographId; Assert.IsTrue(photographService.RemovePhotography(newPhoto)); }
public IDbContextReadOnlyScope GetReadOnlyContextScope(DbContextScopeOption joiningOption = DbContextScopeOption.JoinExisting) { var dbContextScopeFactory = new DbContextScopeFactory(site: _site); return(dbContextScopeFactory.CreateReadOnly(joiningOption)); }
public void GetAllPhotograph() { var dbContextScopeFactory = new DbContextScopeFactory(); var ambientDbContextLocator = new AmbientDbContextLocator(); var photographRepository = new PhotographRepository(ambientDbContextLocator); var photographService = new PhotographServices(dbContextScopeFactory, photographRepository); var photo = photographService.GetAllPhotographs(); //foreach (var photograph in photo) //{ // var tempt = photograph.Title; // foreach(var tempphot in photograph.Projects) // { // var t = tempphot.Title; // } //} Assert.IsNotNull(photo); }
public void GetAPhotograph() { var dbContextScopeFactory = new DbContextScopeFactory(); var ambientDbContextLocator = new AmbientDbContextLocator(); var photographRepository = new PhotographRepository(ambientDbContextLocator); var photographService = new PhotographServices(dbContextScopeFactory, photographRepository); //var userQueryService = new UserQueryService(dbContextScopeFactory, userRepository); //var userEmailService = new UserEmailService(dbContextScopeFactory); //var userCreditScoreService = new UserCreditScoreService(dbContextScopeFactory); var photo = photographService.GetPhotograph(new Guid("9a1f9e3e-b389-e511-9c5a-00249b0905d8")); foreach (var photographInProject in photo.Projects) { foreach (var actualPhoto in photographInProject.Photographs) { string a= actualPhoto.Title; } } var photo2 = photographService.GetPhotograph(new Guid("1a1f9e3e-b389-e511-9c5a-00249b0905d8")); Assert.IsNotNull(photo); }
static void Main(string[] args) { //-- Poor-man DI - build our dependencies by hand for this demo var dbContextScopeFactory = new DbContextScopeFactory(); var ambientDbContextLocator = new AmbientDbContextLocator(); var userRepository = new UserRepository(ambientDbContextLocator); var userCreationService = new UserCreationService(dbContextScopeFactory, userRepository); var userQueryService = new UserQueryService(dbContextScopeFactory, userRepository); var userEmailService = new UserEmailService(dbContextScopeFactory); var userCreditScoreService = new UserCreditScoreService(dbContextScopeFactory); try { Console.WriteLine("This demo application will create a database named DbContextScopeDemo in the default SQL Server instance on localhost. Edit the connection string in UserManagementDbContext if you'd like to create it somewhere else."); Console.WriteLine("Press enter to start..."); Console.ReadLine(); //-- Demo of typical usage for read and writes Console.WriteLine("Creating a user called Mary..."); var marysSpec = new UserCreationSpec("Mary", "*****@*****.**"); userCreationService.CreateUser(marysSpec); Console.WriteLine("Done.\n"); Console.WriteLine("Trying to retrieve our newly created user from the data store..."); var mary = userQueryService.GetUser(marysSpec.Id); Console.WriteLine("OK. Persisted user: {0}", mary); Console.WriteLine("Press enter to continue..."); Console.ReadLine(); //-- Demo of nested DbContextScopes Console.WriteLine("Creating 2 new users called John and Jeanne in an atomic transaction..."); var johnSpec = new UserCreationSpec("John", "*****@*****.**"); var jeanneSpec = new UserCreationSpec("Jeanne", "*****@*****.**"); userCreationService.CreateListOfUsers(johnSpec, jeanneSpec); Console.WriteLine("Done.\n"); Console.WriteLine("Trying to retrieve our newly created users from the data store..."); var createdUsers = userQueryService.GetUsers(johnSpec.Id, jeanneSpec.Id); Console.WriteLine("OK. Found {0} persisted users.", createdUsers.Count()); Console.WriteLine("Press enter to continue..."); Console.ReadLine(); //-- Demo of nested DbContextScopes in the face of an exception. // If any of the provided users failed to get persisted, none should get persisted. Console.WriteLine("Creating 2 new users called Julie and Marc in an atomic transaction. Will make the persistence of the second user fail intentionally in order to test the atomicity of the transaction..."); var julieSpec = new UserCreationSpec("Julie", "*****@*****.**"); var marcSpec = new UserCreationSpec("Marc", "*****@*****.**"); try { userCreationService.CreateListOfUsersWithIntentionalFailure(julieSpec, marcSpec); Console.WriteLine("Done.\n"); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(); } Console.WriteLine("Trying to retrieve our newly created users from the data store..."); var maybeCreatedUsers = userQueryService.GetUsers(julieSpec.Id, marcSpec.Id); Console.WriteLine("Found {0} persisted users. If this number is 0, we're all good. If this number is not 0, we have a big problem.", maybeCreatedUsers.Count()); Console.WriteLine("Press enter to continue..."); Console.ReadLine(); //-- Demo of DbContextScope within an async flow Console.WriteLine("Trying to retrieve two users John and Jeanne sequentially in an asynchronous manner..."); // We're going to block on the async task here as we don't have a choice. No risk of deadlocking in any case as console apps // don't have a synchronization context. var usersFoundAsync = userQueryService.GetTwoUsersAsync(johnSpec.Id, jeanneSpec.Id).Result; Console.WriteLine("OK. Found {0} persisted users.", usersFoundAsync.Count()); Console.WriteLine("Press enter to continue..."); Console.ReadLine(); //-- Demo of explicit database transaction. Console.WriteLine("Trying to retrieve user John within a READ UNCOMMITTED database transaction..."); // You'll want to use SQL Profiler or Entity Framework Profiler to verify that the correct transaction isolation // level is being used. var userMaybeUncommitted = userQueryService.GetUserUncommitted(johnSpec.Id); Console.WriteLine("OK. User found: {0}", userMaybeUncommitted); Console.WriteLine("Press enter to continue..."); Console.ReadLine(); //-- Demo of disabling the DbContextScope nesting behaviour in order to force the persistence of changes made to entities // This is a pretty advanced feature that you can safely ignore until you actually need it. Console.WriteLine("Will simulate sending a Welcome email to John..."); using (var parentScope = dbContextScopeFactory.Create()) { var parentDbContext = parentScope.DbContexts.Get<UserManagementDbContext>(); // Load John in the parent DbContext var john = parentDbContext.Users.Find(johnSpec.Id); Console.WriteLine("Before calling SendWelcomeEmail(), john.WelcomeEmailSent = " + john.WelcomeEmailSent); // Now call our SendWelcomeEmail() business logic service method, which will // update John in a non-nested child context userEmailService.SendWelcomeEmail(johnSpec.Id); // Verify that we can see the modifications made to John by the SendWelcomeEmail() method Console.WriteLine("After calling SendWelcomeEmail(), john.WelcomeEmailSent = " + john.WelcomeEmailSent); // Note that even though we're not calling SaveChanges() in the parent scope here, the changes // made to John by SendWelcomeEmail() will remain persisted in the database as SendWelcomeEmail() // forced the creation of a new DbContextScope. } Console.WriteLine("Press enter to continue..."); Console.ReadLine(); //-- Demonstration of DbContextScope and parallel programming Console.WriteLine("Calculating and storing the credit score of all users in the database in parallel..."); userCreditScoreService.UpdateCreditScoreForAllUsers(); Console.WriteLine("Done."); } catch (Exception e) { Console.WriteLine(e); } Console.WriteLine(); Console.WriteLine("The end."); Console.WriteLine("Press enter to exit..."); Console.ReadLine(); }