LINQ-to-SQLを使用して、1対多の関係にある2つのテーブルを持つデータベースからデータをロードします(1つのレシピには多くの材料が含まれています)。
レシピをロードすると、LINQはIngredientオブジェクトをListBoxにバインドされているEntitySetに取得します。
レシピからいくつかの材料を削除したい場合、「レシピと材料の間の関係を削除しようとしました。しかし、関係の外部キーの1つ(Ingredient.RecipeID)をnullに設定できません。
DBMLファイルに「DeleteOnNull="true"」を追加することで、よく知られた解決策を使用してこの問題を解決しました。ただし、この設定を追加すると、DBから取得した成分オブジェクトを削除する場合にのみ問題が削除されます。
問題は、コードで作成され(レシピに追加され)、IngredientsのEntitySetコレクションに追加され、SubmitUpdatesが呼び出される前に削除されたIngredientオブジェクトにあります。その後、同じ例外が再び発生します。これは通常、ユーザーが材料を追加し、間違いを犯し、レシピから材料を消去するときに、新しい未保存のレシピで発生します。DBMLの両方の'AssociationName="Recipe_Ingredient"'行にDeleteOnNullを追加しました。
そのようなオブジェクトをどのように削除する必要がありますか?現時点で私が目にしている唯一の解決策は、DataContextの下にないコレクションに材料をロードし、保存するときにレシピからすべての材料を削除して、そのキャッシュから再度追加することです。