0

レシピ/食事計画用のアプリケーションを構築していますが、理解できない問題に遭遇しました。

私は測定単位のテーブルを持っています。ここに使用済みの単位を保持しています。ここには一意の単位のみが必要です (食料品リストの計算など)。

しかし、レシピでテーブルの単位を使用すると、最初は問題ありませんが、測定単位には何も挿入されませんが、2 回目は「重複」が発生します。

主キーはSQLサーバー(2008 r2)のID列であるため、エンティティキーと関係があると思われます

何らかの理由で、いくつかのオブジェクト(コース、コードを参照)のobjectstateを変更するために機能し、重複を生成しませんが、測定単位では機能しません

私の挿入メソッドは次のようになります:

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マークします。そのため、グラフに既存のエンティティも含まれている場合は、予期しない挿入を避けるためにそれらを元に戻す必要があります。RecipeAddedUnchanged

于 2012-07-09T09:11:50.917 に答える