レシピ/食事計画用のアプリケーションを構築していますが、理解できない問題に遭遇しました。
私は測定単位のテーブルを持っています。ここに使用済みの単位を保持しています。ここには一意の単位のみが必要です (食料品リストの計算など)。
しかし、レシピでテーブルの単位を使用すると、最初は問題ありませんが、測定単位には何も挿入されませんが、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;
}
私のデータモデルは次のようになります: