Avatar billede sph1nx Nybegynder
07. juli 2012 - 22:07

Entity Framework indsætter dubletter

Hej.

Jeg sidder og roder med en applikation til at lave madplaner, i den forbindelse har jeg valgt at forsøge mig med Entity framework, dog er jeg rendt ind i et problem jeg bare ikke kan gennemskue.

Datamodel kan ses her : http://i.imgur.com/NMwZv.png

Når jeg opretter en opskrift, så vælger jeg en måle enhed (unit of measure) som jeg har i en tabel, hvis ikke enheden findes i forvejen skal den oprettes, ellers skal den eksisterende refereres.

MEN første gang jeg gør det så er det fint, gør jeg det igen uden at genstarte applikationen, så bliver der indsat en ny og den bliver brugt istedet.

min kode til at indsætte er her :

public recipe Create(recipe recipe)
        {

            using (RecipeDataContext ctx = new RecipeDataContext())
            {
                foreach (recipe_ingredient rec_ing in recipe.recipe_ingredient)
                {
                    if (rec_ing.ingredient.ingredient_id == 0)
                    {
                        ingredient ing = (from _ing in ctx.ingredients
                                          where _ing.name == rec_ing.ingredient.name
                                          select _ing).FirstOrDefault();

                        if (ing != null)
                        {
                            rec_ing.ingredient_id = ing.ingredient_id;
                            rec_ing.ingredient = null;
                        }
                    }

                    if (rec_ing.unit_of_measure.unit_of_measure_id == 0)
                    {
                        unit_of_measure _uom = (from dbUom in ctx.unit_of_measure
                                                where dbUom.unit == rec_ing.unit_of_measure.unit
                                                select dbUom).FirstOrDefault();
                        if (_uom != null)
                        {
                            rec_ing.unit_of_measure_id = _uom.unit_of_measure_id;
                            rec_ing.unit_of_measure = null;
                        }
                    }
                    ctx.Recipes.AddObject(recipe);
                    ctx.ObjectStateManager.ChangeObjectState(recipe.courses[0], EntityState.Unchanged); 
                }
                ctx.SaveChanges();
            }

            return recipe;
        }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester