2014-05-12 171 views
3

我正在使用List對象來包含我的主表與我的主表具有一對多關係的輔助表中的項目。主表的PK用作次表上的FK字段。違反PRIMARY KEY約束。無法插入重複密鑰

不過,我得到這個錯誤時,記錄嘗試保存

Violation of PRIMARY KEY constraint 'PK_ClearinghousePartners'. Cannot insert duplicate 
key in object 'dbo.ClearinghousePartners'. The duplicate key value is (0) 

主表型號

僅供參考 - 此表中包含的字段的大量所以我只是展示所述List

public partial class AgentTransmission 
{ 
    . 
    . 
    public virtual List<ClearinghousePartners> ClearinghousePartners { get; set; } 
} 

二次表型號

public partial class ClearinghousePartners 
{ 
    public int Id { get; set; } 
    public string ClearingHouseName { get; set; } 
    public string TradingPartnerName { get; set; } 
    public Nullable<System.DateTime> StartDate { get; set; } 
    public int AgtTransId { get; set; } //FK field corresponds to 'Id' on AgentTransmission 

    public virtual AgentTransmission AgentTransmission { get; set; } 
} 

控制器

當模型回發到控制器保存例外在這方面的代碼被拋出。這是一個實例,其中AgentTransmission對象是全新的並需要添加到數據庫中。 ClearinhousePartners集合中的每個項目也是如此。

每個都是全新的ClearinghousePartners項目,其中IdAgtTransId字段沒有值。我需要AgentTransmission對象先保存,因此可以創建Id字段,然後插入ClearinghousePartners對象中的AgtTransId字段。

agenttransmission.LastChangeDate = DateTime.Now; 
agenttransmission.LastChangeOperator = Security.GetUserName(User); 
db.AgentTransmission.Add(agenttransmission); 
db.SaveChanges(); //Exception thrown here 

查看

<fieldset id="ClearinghousePartners"> 
    <legend>Clearinghouse Partners</legend> 
    <center> 
     <table> 
      <thead> 
       <th>Clearinghouse Name</th> 
       <th>Trading Partner Name</th> 
       <th>Start Date</th>        
      </thead> 
      <tbody> 
       @for (int i = 0; i < Model.ClearinghousePartners.Count(); i++) 
       { 
        <tr align="center"> 
         @Html.HiddenFor(model => model.ClearinghousePartners[i].Id) 
         @Html.HiddenFor(model => model.ClearinghousePartners[i].AgtTransId) 
         <td>@Html.TextBoxFor(model => model.ClearinghousePartners[i].ClearingHouseName, new { style = "width: 100px" })</td> 
         <td>@Html.TextBoxFor(model => model.ClearinghousePartners[i].TradingPartnerName, new { style = "width: 100px" })</td> 
         <td>@Html.TextBoxFor(model => model.ClearinghousePartners[i].StartDate, new { style = "width: 100px" })</td>          
        </tr> 
       } 
      </tbody> 
     </table>        
    </center> 
</fieldset> 

回答

5

重複的鍵值是(0)

我猜你的表沒有被設置爲自動填充您的主鍵值作爲identity財產。聲明應該是這個樣子:

ClearinghousePartners int primary key PK_ClearinghousePartners identity 
2

需要爲ClearinghousePartners.[PrimaryKey]指定一個新的未使用的值,或使該列自動生成的列(被稱爲SQL Server中的標識列 - 什麼RDBMS你usng?)

相關問題