2016-06-19 10 views
0

私はモデル患者を持っていますが、そこには0以上のアドレスがリンクされています。エンティティフレームワークのMVC Http Post設定値

私は1つのプライマリアドレスしか必要としないので、編集/作成ポストでは、他のすべての値を 'IsPrimaryAddress'に設定したいと思います。

私は次のコードを書いています。

// POST: /Roles/Create 
    [HttpPost] 
    public ActionResult Edit(Address address) 
    { 
     using (var context = new WaysToWellnessDB()) 
     { 
      //if address is primary, make all others not 
      if (address.IsPrimaryAddress) 
      { 
       var addresses = context.Addresses.Where(x => x.IsPrimaryAddress == true && x.AddressId != address.AddressId); 
       foreach (var item in addresses) 
       { 
        item.IsPrimaryAddress = false; 
        item.UpdatedBy = -1; 
        item.UpdatedDate = DateTime.Now; 
       } 
      } 

      address.PatientId = Id; 
      address.UpdatedBy = -1; 
      address.UpdatedDate = DateTime.Now; 

      context.Entry(address).State = EntityState.Modified; 
      context.SaveChanges(); 

      return RedirectToAction("View", "Patient", new { @id = Id }); 
     } 
    } 

しかし、私は次のエラーメッセージ取得しています。同じタイプの別のエンティティが既に同じ主キー値を持っているので、タイプのエンティティをアタッチ

は「WaysToWellness.Address」に失敗しました。

なぜ私はこれを行うことができないのか、なぜそれがエラーを投げるのか説明できますか?

答えて

0

私はこの問題を発見したと思います。

私は同じアドレス行を2回、ループに1回、次にもう一度1回設定しようとしていたためだと思います。

次の問題が修正されました。

[HttpPost] 
    public ActionResult Edit(Address address) 
    { 
     using (var context = new WaysToWellnessDB()) 
     { 
      //if address is primary, make all others not 
      if (address.IsPrimaryAddress) 
      { 
       var addresses = context.Addresses.Where(x => x.IsPrimaryAddress == true && x.AddressId != address.AddressId); 
       foreach (var item in addresses) 
       { 
        item.IsPrimaryAddress = false; 
        item.UpdatedBy = -1; 
        item.UpdatedDate = DateTime.Now; 
       } 
      } 

      address.UpdatedBy = -1; 
      address.UpdatedDate = DateTime.Now; 

      context.Entry(address).State = EntityState.Modified; 
      context.SaveChanges(); 

      return RedirectToAction("View", "Patient", new { @id = address.PatientId }); 
     } 
    } 
+0

あなたのwhere句 – dotctor

+0

私は少しこれは必要はなかったとして、患者IDを渡していないための方法を変更していた申し訳ありませんが、私が持っているアップデートに 'x.PatientId == Id'条件を追加するのを忘れました元の投稿 – user3284707

関連する問題