0

我正在为食谱/膳食计划构建一个应用程序,但我遇到了一个我似乎无法弄清楚的问题。

我有一个计量单位表,我将使用的单位保存在其中,我只想要这里的唯一单位(用于杂货清单计算等)

但是如果我在食谱上使用表中的一个单位,第一次没问题,没有插入度量单位,但第二次我得到一个“重复”。

我怀疑它与 entitykey 有关,因为主键是 sql server (2008 r2) 上的标识列

出于某种原因,它可以更改某些对象(课程,请参阅代码)上的对象状态并且不会生成重复项,但这不适用于测量单位

我的插入方法如下所示:

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);
//for some reason it works to change object state of this, and not generate a duplicate
                ctx.ObjectStateManager.ChangeObjectState(recipe.courses[0], EntityState.Unchanged);  
            }



            ctx.SaveChanges();
        }

        return recipe;
    }

我的数据模型如下所示:

http://i.imgur.com/NMwZv.png

4

1 回答 1

0

我想当您尝试保存已分配 UoM 的配方时会发生这种情况(FK!= 0)?在这种情况下,您必须更改其状态Unchanged以避免重复。AddObject标记对象图中的所有实体(不仅Recipe),Added因此如果图还包含现有实体,则必须将它们设置回Unchanged以避免意外插入。

于 2012-07-09T09:11:50.917 回答