首页 > 解决方案 > 在父实体中更新子实体会产生重复的违规键错误

问题描述

我有以下类 spacetype 和 mastersection 具有以下结构

public class SpaceType
{
    public Guid Id { get; set; }
    [ForeignKey("MasterSection")]
    public string MasterSectionName { get; set; }
    public virtual MasterSection MasterSection { get; set; }
    [ForeignKey("LibrarySpaceTypeCategory")]
    public Guid? LibrarySpaceTypeCategoryId { get; set; }
    public virtual LibrarySpaceTypeCategory LibrarySpaceTypeCategory { get; set; }

    [Column(TypeName = "jsonb")]
    public MechanicalData MechanicalData { get; set; }
}

public class MasterSection
{
    [Key, GraphQLNonNullType]
    public string Name { get; set; }
    public List<SectionEmployee> SectionOwners { get; set; } = new List<SectionEmployee>();

    [ForeignKey("ParentMasterSection"), GraphQLIgnore]
    public string ParentMasterSectionName { get; set; }
    public virtual MasterSection ParentMasterSection { get; set; }
}

我正在尝试为所有空间类型更新 mastersection 对象,如下所示

        var spaceTypes = ctx.SpaceTypes.ToList();
        foreach(var spacetype in spaceTypes)
        {
            spacetype.MasterSection = masterSectionMappedLibrary["Space Type"];
        }
        ctx.SaveChanges();

以下是我从中获得的数据masterSectionMappedLibrary["Space Type"]

在此处输入图像描述

并在此处出现错误,ctx.SaveChanges();例如Duplicate key violates unique constraint on PK_Mastersections.

任何人都可以让我知道我在哪里做错了,我正在使用 EF 内核和 postgreSQL。

提前谢谢了

更新:

在此处输入图像描述

标签: c#.net.net-coreentity-framework-coreef-core-3.1

解决方案


尝试这个

var spaceTypes = ctx.SpaceTypes.ToList();
foreach(var spacetype in spaceTypes)
{
   spacetype.MasterSectionName = masterSectionMappedLibrary["Space Type"].Name;
}
ctx.UpdateRange(spaceTypes);
ctx.SaveChanges();

将更新后的值保存到 db 后,尝试再次检索它

var spaceTypesUpdated = ctx.SpaceTypes
                        .Include("MasterSection.ParentMasterSection")
                        .Include("SectionOwners")
                        .ToList();
// serialize spaceTypesUpdated to json

推荐阅读