2016-03-22 12 views
2

私は、ASP.NETのコントローラに1つだけの行を更新する方法を考え出すの問題を抱えています。私は作成したWeb APIへの投稿要求を送信しようとしていますが、要求は進行しますが、1行のみを更新するのではなく、SQLで操作しようとしているテーブルのすべての行(列の目標のすべての行)データベース。この問題の助けに感謝します。 AngularJSの$ httpサービスを使用して投稿リクエストを送信しています。ASP.NETのWeb APIコントローラーの更新行

ASP.NET C#

public class patient_goalsController : ApiController 
    { 
     . 
     . 
     . 

     //POST: api/goals/update/1 
     [Route("Api/goals/update/{id}")] 
     public void UpdatePatientGoal(int id, patient_goals patient_goals) 
     { 
      var goals = (from p_goal in db.patient_goals 
         where patient_goals.id == id 
         select p_goal); 
      foreach(patient_goals row in goals) 
      { 
       row.goal = patient_goals.goal; 
      } 


     } 

     . 
     . 
     . 

    } 

AngularJS

$scope.updateGoal = function(goal){ 
goal.editing = false; 
console.log(goal.id); 
var data = {"id": goal.id, "goal": goal.goal} 
$http({ 
    method: "POST", 
    url: urlBase + "/goals/update/" + goal.id, 
    data: data, 
}).then(function error(response) { 
    $scope.error = response.statusText; 
    console.log(response.statusText); 
}); 

DB

id (int) 
goal (text) 

答えて

4

だけで、あなたが望む単一接続されたエンティティを見つける編集を行い、その後、変更を保存します。

[Route("Api/goals/update/{id}")] 
public void UpdatePatientGoal(int id, patient_goals) 
{ 
     var goal = db.patient_goals.FirstOrDefault(x => x.id == id); 

     if(goal != null) 
     { 
      goal.goal = patient_goals.goal; 
      db.SaveChanges(); 
     } 
    } 
+0

ありがとう、これは私の問題を解決しました。私はかなりASP.NETに新しいので、私は本当に私のクエリを行うための最良の方法を知らない。 – user3704351

+0

@ user3704351問題なく、うれしくて助かりました。 –

0

私は本当にあなたのデータベーススキーマの詳細を知らないが、それはあなたのwhereのように見えます - 句が正しくありません。むしろpatient_goals.idと比較するよりも、あなたはp_goalと比較されるだろう:

  var goals = (from p_goal in db.patient_goals 
         where p_goal.id == id 
         select p_goal); 

そうでない場合は、単にあなたのパラメータリストから値を比較しています。

+0

残念ながら、私の問題を解決していない以上、あなたの提案と私のクエリを変更し、ポストの要求はまだ動作しますが、それは私のテーブル内の任意の行を変更しません。 – user3704351

関連する問題