Entity Framework méthode de mise à Jour pour objet de collection

J'ai un problème avec la mise à jour de l'entité en DB. Je suis en utilisant Entity Framework Code First.

J'ai un petit programme de calcul de la nourriture.

Mes classes de domaine>

public class Unit
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

public abstract class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

public class Ingredient : Item
    {        
        public virtual Unit Unit { get; set; }               
        public decimal Price { get; set; }        
    }

public class Recipe : Item 
    {
        public virtual List<RecipeItem> Items { get; set; }
        public double WeightCoocked { get; set; }
        public bool IsAlsoIngredient { get; set; }        
    }

public class RecipeItem
    {
        public int Id { get; set; }
        public virtual Item Item { get; set; }        
        public int Quantity { get; set; }
    }

Note seulement que RecipeItem peut être l'Ingrédient mais aussi Recette, donc je peux inclure recette en recette.

J'ai essayé ce genre de mises à jour de méthodes:

public void Update1(Recipe recipe)
        {            
            if (recipe == null) 
                return;                

            var originalRecipe = DataContext.Recipes.FirstOrDefault(i => i.Id == recipe.Id);

            if (originalRecipe == null) 
                return; 

            DataContext.Entry(originalRecipe).CurrentValues.SetValues(recipe);

            DataContext.SaveChanges();
        }

Update1 fonctionne, mais ma collection n'est pas mis à jour.

public void Update2(Recipe recipe)
        {            
            if (recipe == null) 
                return;                

            var originalRecipe = DataContext.Recipes.FirstOrDefault(i => i.Id == recipe.Id);

            if (originalRecipe == null) 
                return; 

            DataContext.Entry(originalRecipe).State = EntityState.Modified;

            DataContext.SaveChanges();
        }

Update1 fonctionne même comme Update1 mais si je change de collection, j'ai exception.
J'ai aussi essayé de mettre cette ligne

DataContext.Entry(originalRecipe.Items).State = EntityState.Modified;

Dernière mise à Jour de la méthode>

public void Update3(Recipe recipe)
        {            
            if (recipe == null) 
                return;                

            var originalRecipe = DataContext.Recipes.FirstOrDefault(i => i.Id == recipe.Id);

            if (originalRecipe == null) 
                return; 

            DataContext.Recipes.Attach(recipe);
            DataContext.Entry(originalRecipe).State = EntityState.Modified;
            DataContext.Entry(originalRecipe.Items).State = EntityState.Modified;

            DataContext.SaveChanges();
        }

Se même exception:
Un objet avec la même clé existe déjà dans le Vousmanager. Le Vousmanager ne peut suivre plusieurs objets avec la même clé.

Je n'ai pas de problème avec la mise à jour de tables> Unités et les Ingrédients, mais avec de la collection qui me rend nerveux. J'ai déjà regardé des vidéos de youtube sur EF sur pluralsight, mais il n'y a pas d'exemple que j'ai.

Merci pour votre aide.

InformationsquelleAutor tonco | 2013-08-16