Пример #1
0
        private static void ApplyChanges <TEntity>(TEntity root) where TEntity : class, IObjectWithState
        {
            using (var context = new BreakAwayContext())
            {
                context.Set <TEntity>().Add(root);

                CheckForEntitiesWithoutStateInterface(context);

                foreach (var entry in context.ChangeTracker
                         .Entries <IObjectWithState>())
                {
                    IObjectWithState stateInfo = entry.Entity;
                    if (stateInfo.State == State.Modified)
                    {
                        entry.State = EntityState.Unchanged;
                        foreach (var property in stateInfo.ModifiedProperties)
                        {
                            entry.Property(property).IsModified = true;
                        }
                    }
                    else
                    {
                        entry.State = ConverterState(stateInfo.State);
                    }
                    entry.State = ConverterState(stateInfo.State);
                }

                context.SaveChanges();
            }
        }
Пример #2
0
        private static void HandlePartialUpdate(DbContext context, IObjectWithState objectWithState,
                                                EntityEntry <IObjectWithState> entry)
        {
            var objectWithPartialUpdate = objectWithState as IObjectWithPartialUpdate;

            if (objectWithPartialUpdate == null)
            {
                throw new InvalidOperationException(string.Format("Entity {0} must inheritance from" +
                                                                  " IObjectWithPartialUpdate",
                                                                  objectWithState.GetType()));
            }

            // context.Configuration.ValidateOnSaveEnabled = false;

            entry.State = EntityState.Unchanged;
            //foreach (var property in objectWithPartialUpdate.ModifiedProperties)
            //{
            //    var errors = entry.Property(property).GetValidationErrors();
            //    if (errors.Count == 0)
            //    {
            //        entry.Property(property).IsModified = true;
            //    }
            //    else
            //    {
            //        throw new DbEntityValidationException(string.Format("{0} has some errors.", property),
            //            new[] { new DbEntityValidationResult(entry, errors) });
            //    }
            //}
        }
Пример #3
0
 public static void ApplyStateChanges(this DbContext context)
 {
     foreach (var entry in context.ChangeTracker.Entries <IObjectWithState>())
     {
         IObjectWithState stateInfo = entry.Entity;
         entry.State = ConvertState(stateInfo.ObjectState);
     }
 }
Пример #4
0
 private void ApplyStateChanges(U entityContext, T entity)
 {
     foreach (var entry in entityContext.ChangeTracker.Entries <IObjectWithState>())
     {
         IObjectWithState stateInfo = entry.Entity;
         entry.State = ConvertState(stateInfo.State);
     }
 }
Пример #5
0
 public static void ResetStateChanges(this DbContext context)
 {
     foreach (var entry in context.ChangeTracker.Entries <IObjectWithState>())
     {
         IObjectWithState stateInfo = entry.Entity;
         stateInfo.ResetState();
     }
 }
Пример #6
0
 public void FixState()
 {
     foreach (var entry in ChangeTracker.Entries <IObjectWithState>())
     {
         IObjectWithState stateInfo = entry.Entity;
         entry.State = DataUtilities.ConvertState(stateInfo.State);
     }
 }
        public void Save_ValidViewModelWithObjectStateEdited_ARecipeWasEditedInDatabase()
        {
            //Arrange
            var user = _context.Users.First();

            _recipesControllers.MockControllerContext(user.Id, user.UserName);


            var foodType = new FoodType();

            foodType = _context.FoodTypes.FirstOrDefault();

            _food = _context.Foods.FirstOrDefault(f => f.FoodTypeId == foodType.Id);

            _ingredientType = _context.IngredientTypes.FirstOrDefault();

            _ingredient = _context.Ingredients.FirstOrDefault(i => i.IngredientTypeId == _ingredientType.Id);

            _unitOfMeasure = _context.UnitOfMeasures.FirstOrDefault();

            var recipe = AddNewRecipe(foodType, _food, _unitOfMeasure, _ingredientType, _ingredient, user);

            _context.Recipes.Add(recipe);
            _context.SaveChanges();


            //Action
            var recipeFormViewModel = CreateRecipeFormViewModelWithRecipe(recipe, ObjectState.Unchanged, ObjectState.Unchanged);

            recipeFormViewModel.Title       = "Test Recipe 2";
            recipeFormViewModel.ObjectState = ObjectState.Modified;
            recipeFormViewModel.RecipeIngredients[0].Amount      = 2;
            recipeFormViewModel.RecipeIngredients[0].ObjectState = ObjectState.Modified;

            foreach (var entry in _context.ChangeTracker.Entries <IObjectWithState>())
            {
                IObjectWithState stateInfo = entry.Entity;
                entry.State = EntityState.Detached;
            }
            _recipesControllers.Save(recipeFormViewModel);

            recipe = _context.Recipes.FirstOrDefault(r => r.Title == "Test Recipe 2");
            var recipe2 = _context.Recipes.FirstOrDefault(r => r.Title == "Test Recipe");


            //Assertions
            Assert.IsNotNull(recipe);
            recipe.RecipeIngredients.Should().HaveCount(1);
            recipe2.Should().BeNull();
        }
Пример #8
0
        public static void SaveCustomerTypeGraph(CustomerType customerType)
        {
            using (var context = new Model1ContainerContainer())
            {
                context.CustomerTypes.Add(customerType);
                foreach (var entry in context.ChangeTracker
                         .Entries <IObjectWithState>())
                {
                    IObjectWithState stateInfo = entry.Entity;
                    entry.State = ConvertState(stateInfo.State);
                }

                context.SaveChanges();
            }
        }
Пример #9
0
        public static void SaveDestinationGraph(Destination destination)
        {
            using (var context = new BreakAwayContext())
            {
                context.Destinations.Add(destination);

                foreach (var entry in context.ChangeTracker.Entries <IObjectWithState>())
                {
                    IObjectWithState stateInfo = entry.Entity;
                    entry.State = ConverterState(stateInfo.State);
                }

                context.SaveChanges();
            }
        }
Пример #10
0
        // Was a static method: This is a base class so we do not want to use
        // a static method here.
        // Question: Make ApplyChanges happen automatically by
        // implementing INotifyPropertyChanges
        public void ApplyChanges <TEntity>(TEntity root) where TEntity : class, IObjectWithState
        {
            using (var context = new BaseContext <TContext>())
            {
                context.Set <TEntity>().Add(root);

                CheckForEntitiesWithoutStateInterface(context);

                foreach (var entry in context.ChangeTracker.Entries <IObjectWithState>())
                {
                    IObjectWithState stateInfo = entry.Entity;
                    entry.State = ConvertState(stateInfo.State);
                }

                context.SaveChanges();
            }
        }
Пример #11
0
 public static void ApplyChanges <TEntity>(TEntity root) where TEntity : class, IObjectWithState
 {
     using (var context = new AndaroDbContext())
     {
         context.Set <TEntity>().Add(root);
         CheckForEntititesWithoutStateInterface(context);
         foreach (var entry in context.ChangeTracker.Entries <IObjectWithState>())
         {
             IObjectWithState stateInfo = entry.Entity;
             entry.State = StateHelpers.ConvertState(stateInfo.State);
             if (stateInfo.State == State.Unchanged)
             {
                 var databaseValues = entry.GetDatabaseValues();
                 entry.OriginalValues.SetValues(databaseValues);
             }
         }
     }
 }
Пример #12
0
        private static void ApplyChanges <TEntity>(TEntity root)
            where TEntity : class, IObjectWithState
        {
            using (var context = new Model1ContainerContainer())
            {
                context.Set <TEntity>().Add(root);
                // cazul cand o clasa din model nu implementeaza
                // interfata IObjectWithState
                CheckForEntitiesWithoutStateInterface(context);
                foreach (var entry in context.ChangeTracker
                         .Entries <IObjectWithState>())
                {
                    IObjectWithState stateInfo = entry.Entity;
                    entry.State = ConvertState(stateInfo.State);
                }

                context.SaveChanges();
            }
        }
Пример #13
0
        /// <summary>
        /// Aplicación de cambios en la fuente de datos.
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="root"></param>
        /// <returns></returns>
        public async Task <int> ApplyChanges <TEntity>(TEntity root) where TEntity : class, IObjectWithState
        {
            Set <TEntity>().Add(root);
            CheckForEntitiesWithoutStateInterface(this);
            foreach (var entry in ChangeTracker.Entries <IObjectWithState>())
            {
                IObjectWithState stateInfo = entry.Entity;
                if (stateInfo.State == ModelState.Modified)
                {
                    entry.State = EntityState.Unchanged;
                    foreach (var property in stateInfo.ModifiedProperties)
                    {
                        entry.Property(property).IsModified = true;
                    }
                }
                else
                {
                    entry.State = ConvertState(stateInfo.State);
                }
            }

            return(await SaveChangesAsync());
        }
Пример #14
0
        public static void ConvertStateOfNode(EntityEntryGraphNode node)
        {
            IObjectWithState entity = (IObjectWithState)node.Entry.Entity;

            node.Entry.State = ConvertToEFState(entity.State);
        }