Example #1
0
        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);
        }
Example #2
0
        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 })));
        }
Example #3
0
        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));
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
		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();
		}