2016-11-04 5 views
3

私はEFでc#mvcを使用しています。私はウェブサイトを構築しています。新しい値でテーブルを更新すると、次のエラーが発生します。Entity Frameworkのデータベース内のレコードを更新するには?

は{ "PRIMARY KEY制約 'PK_Table_1_1'。の違反はオブジェクトのdbo.User '内の重複するキーを挿入できません。重複したキー値が([email protected])です。\ rを\のnこの文は終了しました"}

ここは私の表のデザインです。ここで

enter image description here

ここに私のコントローラファイル

[HttpPost] 
    public ActionResult Manage(ManageViewModel manageviewmodel) 
    { 
     TheFoodyContext db = new TheFoodyContext(); 
     string UserEmail = Session["UserEmail"].ToString(); 
     User user_to_update = db.Users.Find(UserEmail); 

     if (ModelState.IsValid) 
     { 

      try 
      { 
       HttpPostedFileBase photo = Request.Files["photo"]; 

      if (photo != null && photo.ContentLength > 0) 
      { 
       var path = ""; 
       var fileName = Path.GetFileName(photo.FileName); 
       var extension = Path.GetExtension(photo.FileName); 
       var allowedExtensions = new[] {".Jpg", ".png", ".jpg", "jpeg"}; 
       if (allowedExtensions.Contains(extension)) 
       { 
        string name = Path.GetFileNameWithoutExtension(fileName); 
        string myfile = name + "_" + UserEmail + extension; 
        path= Path.Combine(Server.MapPath("~/Img"), myfile); 
        photo.SaveAs(path); 
        user_to_update.photo = myfile; 

       } 
       else 
       { 
        ViewBag.message = "Please choose only Image file"; 
       } 


       user_to_update.email = UserEmail; 
       user_to_update.fname = manageviewmodel.FirstName; 
       user_to_update.lname = manageviewmodel.LastName; 
       user_to_update.phone = manageviewmodel.Phone; 
       user_to_update.address = manageviewmodel.Address; 
       user_to_update.city = manageviewmodel.City; 
       user_to_update.postcode = Convert.ToDecimal(manageviewmodel.PostCode); 
       user_to_update.district = manageviewmodel.District; 
       user_to_update.user_type = manageviewmodel.UserType; 
       user_to_update.status = manageviewmodel.Status; 
       user_to_update.photo = path; 

       db.Users.Add(user_to_update); 
       db.SaveChanges(); 

       Session["UserEmail"] = UserEmail; 
       Session["FirstName"] = manageviewmodel.FirstName; 
       Session["LastName"] = manageviewmodel.LastName; 
       Session["Address"] = manageviewmodel.Address; 
       Session["City"] = manageviewmodel.City; 
       Session["PostCode"] = manageviewmodel.PostCode; 
       Session["District"] = manageviewmodel.District; 
       Session["UserType"] = manageviewmodel.UserType; 
       Session["Status"] = manageviewmodel.Status; 
       Session["Phone"] = manageviewmodel.Phone; 
       return RedirectToAction("Manage"); 
      } 
      } 
      catch (Exception ex) 
      { 
      return View(ex.Message); 
      } 
      return View(manageviewmodel); 
      } 

      return View(manageviewmodel); 

     } 

は私のモデルファイルは、あなたが(それが既に存在再びユーザーを追加する必要があり、EFトラックはありません

public class ManageViewModel 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 
    public string photo { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public int PostCode { get; set; } 
    public string District { get; set; } 
    public string UserType { get; set; } 
    public string Status { get; set; } 
} 

答えて

5

です変更する)、単にSaveChangesと呼んで完了です。 (より多くのエラーがある場合を除き)

db.Users.Add(user_to_update); 

、それが動作するはずです:
はちょうどこの行を削除します。

+0

なぜdownvoteですか?すでに存在するエンティティを追加することはできません。それは同じ鍵を持ち、OPの例外を解読するでしょう – Marco

+0

@Manfred Radlwimmerありがとうございました。それは魅力のように働いた。 :) – Punya

+0

@マルコいいえ、明らかに正しい答えでした。 –

関連する問題