2009-10-31 148 views
0

我得到這個錯誤...無法插入重複鍵

Violation of PRIMARY KEY constraint 'PK_Members'. Cannot insert duplicate key in object 'dbo.Members'. 
The statement has been terminated. 

當我嘗試使用ASP.NET MVC成員資格和角色提供。它在RoleProvider中調用GetUser方法時發生。

 var member = System.Web.Security.Membership.GetUser(email) as Models.Member; 
     //var member = (
     // from m in DataContext.Members 
     // where m.Email == email 
     // select m).Single(); 

     var role = (
      from r in DataContext.Roles 
      where r.Name == roleName 
      select r).Single(); 

     member.Groups.Add(new Models.Group(role)); 

     DataContext.SubmitChanges(); 

回答

1

看起來問題出在代碼

member.Groups.Add(new Models.Group(role)); 

基於sql返回的錯誤信息,像GetUser這樣的Read操作不會拋出這種類型的錯誤。

+0

該錯誤是由DataContext.SubmitChanges()引起的。我已經調查過這裏發佈的所有內容,並且沒有重複的內容。 – Ciel

+0

這是確定的地方出現問題的地方。它調用NewGuid()方法。我需要弄清楚如何解決這個問題。謝謝。我將爲此製作另一個話題。 – Ciel

0

我懷疑這是因爲你正在添加一個已經存在的組。

也許你應該在試圖添加它之前檢查角色的存在。

希望這會有所幫助。

0

你確定你是不是想輸入一個數字主鍵字段是已經在那裏?如果AUTO_INCREMENT,只需輸入0,它將使該字段的值,最後一個號碼+ 1

希望這有助於:)

+0

這是一個在數據庫中設置了newid()的GUID。 – Ciel

0

如果異常是SqlException,那麼您可能會得到重複記錄的錯誤編號(2627)。您可能會捕獲該異常並進行驗證,並相應地顯示和管理任何錯誤。我希望這有幫助。

catch (SqlException ex) 
      { 
       if (ex.Number == 2627) 
       { 
        MessageBox.Show("This record exists: "+ex.Message, "Error"); 
       } 
       else 
       { 
        MessageBox.Show(ex.Message, "Error") 
       } 
      }