c# - 使用条件唯一约束保存实体时出现循环依赖错误
问题描述
这是我在这里所做的后续工作:仅在 EF Core 中为“true”创建唯一约束
我有一个对两列具有唯一约束的表,RecordId
并且IsPrimary
. 表中每个只能有一个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
无法保存更改,因为在要保存的数据中检测到循环依赖:'索引:RecordAttachment.RecordId,RecordAttachment.IsPrimary Unique,索引:RecordAttachment.RecordId,RecordAttachment.IsPrimary Unique'。
虽然,我不知道循环依赖到底是什么。检查要保存的实体只有 2 个RecordAttachment
实体,没有别的:1 个IsPrimary
设置为false
(previously true
),另一个IsPrimary
设置为true
(previously false
),两者都具有相同的RecordId
.
解决方案
推荐阅读
- hyperledger-fabric - 无法使用 Fabric SDK Java 更新通道配置:字段“common.ConfigUpdate.channel_id”包含无效的 UTF-8
- java - 如何创建包含多个 jar 的自定义 pom 依赖项?可能吗?
- python - Google Analytics v4 自定义事件(服务器端)
- ios - Xcode 图像集纵横比
- flutter - 全局变量或 Provider 不允许 Flutter 中的增量
- svg - manim 不会在电影中添加 svg 文本
- http - 无法解析域名
- gradle - 在另一个任务中使用 Gradle 任务功能
- c# - C# 从另一个 Form2 更改 SQL 查询和 Form1 的 DGV
- python - ValueError:对象的长度 (1) 与字段的长度 (2) 不匹配