添加包含复合主键的实体

Add entity which contains composite Primary Key

我正在使用 Entity Framework(我认为是 V5)并且目前正在尝试向 table 添加一个新行。我希望添加的 table 有一个基于值 "PRN" 的复合主键(基本上是一个唯一的客户 ID)和一个关联的序列号。每次更新此 table 中的信息时,我们都会为 PRN 插入一个新行并增加序列号。序列号未定义为数据库中的自动递增值或 IDENTITY,因为它不是唯一的 - 序列号仅在每个 PRN 中是唯一的。

当我执行以下代码时,我得到一个 InvalidOperationException:"The property 'DDIPhasedPayment_Seq_Num' is part of the object's key information and cannot be modified."

EF 似乎不介意我只修改主键的 PRN 部分并保存记录(这导致 Seq_Num 的默认值为零)但是当我尝试修改PK的另一部分。如何在不扰乱 EF 的情况下为此 table 创建并添加一行?

var nextSequence = GetNextPhasedPaymentSequenceNumber(message.Prn);
var entity = new Practitioner_DDI_PhasedPayment()
{
    PRN = message.Prn,
    DDIPhasedPayment_Seq_Num = nextSequence,
    TSN = message.Tsn,
    //........
    //Various other fields populated
    //........
};
dbContext.Practitioner_DDI_PhasedPayment.Add(entity);

dbContext.SaveChanges();

Gert - 感谢您的提示,这正是问题所在:

private short GetNextPhasedPaymentSequenceNumber(int prn)
    {
        var lastPayment = WISERDb.Practitioner_DDI_PhasedPayment.Where(ddipp => ddipp.PRN == prn).OrderByDescending(k => k.DDIPhasedPayment_Seq_Num).FirstOrDefault();

        if (lastPayment == null) { return 1; }

        else { return ++lastPayment.DDIPhasedPayment_Seq_Num; }
    }

这里使用 ++ 运算符是问题所在 - 它应该返回值 + 1。