2015-06-21 75 views
0

處理我有一個名爲測試一個數據庫,其中包括所謂的用戶信息保存用戶的信息在我的網站一個表例外在db.SaveChanges()在asp.net MVC

用戶信息表包含

1.ID:主鍵 2.name 3.password

http://s4.postimg.org/ut37i6y6x/window1.png

namespace FirstApp.Models 
    { 
    using System; 
    using System.Collections.Generic; 

    public partial class userinfo 
    { 
    public int ID { get; set; } 
    public string name { get; set; } 
    public string password { get; set; } 
    } 
    } 

我修改C帳戶ontroller如下所示:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using FirstApp.Models; 


namespace FirstApp.Controllers 
{ 
public class AccountController : Controller 
{ 


public TestEntities3 db = new TestEntities3(); 
public ActionResult Index() 
{ 
return View(); 
} 
[HttpGet] 

public ActionResult Reg() 
{ 
return View(); 

} 
    [HttpPost] 

    public ActionResult Reg(Models.userinfo regclass) 
    { 

     var newuser = db.userinfoes.Create(); 
     db.userinfoes.Add(regclass); 
     db.SaveChanges(); 
     return View(regclass); 



    } 
} 
} 

和圖如下所示:

@model FirstApp.Models.userinfo 
@{ 
ViewBag.Title = "Reg"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>This is Registration page </h2> 

@using (Html.BeginForm()) 
{ 


<div> 
@Html.LabelFor(u=>u.name) 
@Html.TextBoxFor(u=>u.name) 
</div> 

<div> 
@Html.LabelFor(u=>u.password) 
@Html.PasswordFor(u=>u.password) 
</div> 

<input type="submit" /> 
} 

當我測試上面的代碼是在只有第一用戶的工作,但,當我試圖進入第二用戶以下異常發生:

http://s11.postimg.org/5hg84m16b/problem1.png

以另一種嘗試此錯誤消息是出現:

無法將重複值插入到唯一索引中。 [Table name = userinfo,Constraint name = PK_userinfo]

+0

你能發佈你的實體如何配置? – KnightFox

回答

0

沒有看到你的實體是如何配置的,很難調試它。但是,如果您在DbSet上使用Create函數,而且您沒有正確覆蓋主鍵字段,則會引發類似的異常。默認情況下,數據類型的默認值將分配給實體中的ID列字段(int列爲0)。因此,當您第一次嘗試保存用戶信息時,將會創建ID = 0的新用戶信息。第二次嘗試保存userInfo時,您將遇到主鍵違例。

可能的解決方案是將db上的ID列標記爲標識列,然後使用https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.schema.databasegeneratedattribute(v=vs.110).aspx屬性裝飾c#實體中的對應字段。

0

它看起來像你正在創建一個新的用戶,但從來沒有使用它。您直接將regclass添加到上下文,然後保存它。

您可以創建新用戶(newUser),然後將新用戶中的值更新爲regClass中的值(忽略索引),然後保存上下文(意思是您從未實際上將regclass對象保存到上下文中 - 但你更新剛剛創建的新用戶)