使用条件唯一约束保存实体时的循环依赖性错误

时间:2018-04-30 17:50:06

标签: c# sql-server entity-framework-core

这是我在此处所做的后续工作:Create Unique constraint for 'true' only in EF Core

我的表格在两列RecordIdIsPrimary上有唯一约束。 true表中每RecordId只能有一个RecordAttachment值。迁移在表上创建了此索引:

CREATE UNIQUE INDEX [IX_RecordAttachment_RecordId_IsPrimary] 
ON [RecordAttachment] ([RecordId], [IsPrimary]) 
WHERE [IsPrimary] = 1;

为了在服务器上处理这个问题,我在更新另一个RecordAttachment设置为IsPrimary时编写了我的存储库方法来更新现有的主要附件:

public async override Task<RecordAttachment> UpdateAsync(RecordAttachment item)
{
    if (item.IsPrimary)
    {
        RecordAttachment oldPrimaryAttachment = await _context.RecordAttachment
            .Where(ra => ra.RecordId == item.RecordId && ra.IsPrimary && ra.RecordAttachmentId != item.RecordAttachmentId)
            .SingleOrDefaultAsync();

        if (oldPrimaryAttachment != null)
        {
            oldPrimaryAttachment.IsPrimary = false;
            _context.RecordAttachment.Update(oldPrimaryAttachment);
        }
    }

    _context.RecordAttachment.Update(item);
    await _context.SaveChangesAsync();

    return item;
}

但是,现在当我更新Attachment并将当前记录设置为Primary的另一个Attachment时设置为Primary - 即我的更新方法必须更新其他附件并将其IsPrimary字段设置为false以容纳新的IsPrimary附件 - 在将更改保存到数据库时出现此异常:

  

无法保存更改,因为在要保存的数据中检测到循环依赖关系:&#39;索引:RecordAttachment.RecordId,RecordAttachment.IsPrimary唯一,索引:RecordAttachment.RecordId,RecordAttachment.IsPrimary Unique&#39;。< / p>

虽然,我不知道循环依赖是什么。检查要保存的实体只有2个RecordAttachment个实体,其他内容:1个IsPrimary设置为false(之前为true),另一个设置为IsPrimary设置为true(之前为false),并且都设置为RecordId

0 个答案:

没有答案