加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 违反PRIMARY KEY约束.无法插入重复键

发布时间:2020-12-16 02:01:39 所属栏目:百科 来源:网络整理
导读:我正在使用List对象来包含我的主表与其具有一对多关系的辅助表中的项目.主表的PK用作辅助表上的FK字段. 但是,当记录尝试保存时,我收到此错误 Violation of PRIMARY KEY constraint 'PK_ClearinghousePartners'. Cannot insert duplicate key in object 'dbo.
我正在使用List对象来包含我的主表与其具有一对多关系的辅助表中的项目.主表的PK用作辅助表上的FK字段.

但是,当记录尝试保存时,我收到此错误

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

主表模型

仅供参考 – 此表包含大量字段,因此我只显示列表

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>

解决方法

The duplicate key value is (0)

我猜你的表没有设置为自动将主键值填充为标识属性.声明应如下所示:

ClearinghousePartners int primary key PK_ClearinghousePartners identity

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读