2012-04-11 8 views
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; 
             } 
            }        
           } 
          } 
         } 
        } 
    

答えて

0

AddLink方法が働いていました。データの問題が原因でエラーが発生しました。

関連する問題