0
新しいInputParameterエンティティが新しいInputOutputMapに関連付けられています。 InputOutputMapには、データベースから取得するいくつかのInputStatesがあり、InputOutputMapに関連付ける必要があります。 MVCとWCFデータサービスを使用してこのチェーンをデータベースに保存するにはどうすればよいですか?私は、(以下に示すように)私はAddLinkを使用する場合WCFデータサービスを使用して関連エンティティのコレクションを持つエンティティを保存する方法
- :私は、次のコードを使用しています(AJAX呼び出しを介して呼び出されて、文脈が唯一のコンストラクタの最初の呼び出しで設定されている)が、いくつかの問題を取得しています私が最初に試したときにデータを追加することができます(関連付ける必要のある入力ステートメントの数に関係なく)。しかし、メソッドが(ajaxを介して)再度呼び出された場合、私は1つのinputstateを指定している場合にのみデータを追加できます。複数のinputstatesがある場合、私はコンテキストが既に関係を追跡しているのを知る。メソッドがajax呼び出しを使用して呼び出されていることに注意してください。
- 私はSetLink、AddRelatedObjectを使用して接続しようとしましたが、毎回上記のシナリオでエラーが発生しています。時には、エラーは、コンテキストが既にエンティティまたは関係を追跡しているということです。他の時には、コンテキストはエンティティを追跡していません。
コンストラクタの代わりにメソッドでコンテキストを設定しても、私は何のメリットもありませんでした。所望に応じて
if (vm != null) { ParameterPart parameterPart = null; // Create a new parameter if (vm.PartNumberId == 0) { // Create an instance of ParameterPart parameterPart = new ParameterPart() { Description = vm.ParameterDescription }; // Save the ParameterPart into the database try { ctx.AddToParameterParts(parameterPart); ctx.SaveChanges(); } catch (System.Exception ex) { throw; } } else { // Fetch the existing parameter parameterPart = new ParameterPart(); parameterPart = (from pp in ctx.ParameterParts where pp.PartNumberId == vm.PartNumberId select pp).Single(); // Update the ParameterPart from the vm parameterPart.Description = vm.ParameterDescription; } if (parameterPart != null) { if (vm.StateValues.Count > 0) { InputOutputMap inputOutputMap = new InputOutputMap(); inputOutputMap.PartNumberId = parameterPart.PartNumberId; ctx.AddToInputOutputMaps(inputOutputMap); // Prepare a new InputOutputMap foreach (var state in vm.StateValues) { if (state.InputStateId != 0) { // Fetch the inputstate var inputState = (from i in ctx.InputStates where i.InputStateId == state.InputStateId select i).Single(); try { ctx.AddLink(inputOutputMap, "InputStates", inputState); ctx.SaveChanges(); } catch (System.Exception ex) { throw; } } } } } }