违反 PRIMARY KEY 约束。无法插入重复键
Posted
技术标签:
【中文标题】违反 PRIMARY KEY 约束。无法插入重复键【英文标题】:Violation of PRIMARY KEY constraint. Cannot insert duplicate key 【发布时间】:2014-06-30 04:51:47 【问题描述】:我正在使用List
对象来包含与我的主表具有一对多关系的辅助表中的项目。主表的PK
用作辅助表上的FK
字段。
但是,当记录尝试保存时,我收到此错误
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
项目,没有 Id
和 AgtTransId
字段的值。我需要先保存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>
【问题讨论】:
【参考方案1】:重复键值为(0)
我猜您的表没有设置为自动将您的主键值填充为identity
属性。声明应如下所示:
ClearinghousePartners int primary key PK_ClearinghousePartners identity
【讨论】:
【参考方案2】:您需要为ClearinghousePartners.[PrimaryKey]
指定一个新的未使用值,或者将此列设为自动生成的列(在 sql server 中称为 Identity 列 - 您使用的是什么 RDBMS?)
【讨论】:
以上是关于违反 PRIMARY KEY 约束。无法插入重复键的主要内容,如果未能解决你的问题,请参考以下文章
违反 PRIMARY KEY 约束“[Table_id]”。使用实体框架时无法在对象“[Table_id]”中插入重复键
(转)sql 违反了 PRIMARY KEY 约束,不能在对象 中插入重复键