我正在使用Entity Framework(我认为是V5),目前正在尝试向表中添加新行。我希望添加的表具有基于值“PRN”(基本上是唯一的客户ID)和相关序列号的复合主键。每次更新此表中的信息时,我们都会为PRN插入一个新行并递增序列号。序列号未定义为数据库上的自动递增值或IDENTITY,因为它不是唯一的 - 序列号仅对每个PRN唯一。
当我执行以下代码时,我得到一个InvalidOperationException:“属性'DDIPhasedPayment_Seq_Num'是对象的密钥信息的一部分,无法修改。”
如果我只修改主键的PRN部分并保存记录(导致Seq_Num的默认值为零),那么EF似乎并不介意,但是当我尝试修改其他部分时抛出异常PK。如何在不扰乱EF的情况下为此表创建和添加行?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();
答案 0 :(得分:0)
格特 - 感谢您的提示,这正是问题所在:
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。