Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除具有一对一可选关系的实体时EntityFramework错误_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 删除具有一对一可选关系的实体时EntityFramework错误

C# 删除具有一对一可选关系的实体时EntityFramework错误,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,当我试图删除一个实体,该实体通过一对一的关系与另一个实体相关,两端都是可选的,我有以下错误: 来自“陪审团席位”的关系在 “已删除”状态。给定多重性约束,相应的 “陪审团插槽目标”也必须处于“已删除”状态 我的实体: public class ApplicantTest { [Key] public int Id { get; set; } // some other properties public virtual JurySlot JurySlot {

当我试图删除一个实体,该实体通过一对一的关系与另一个实体相关,两端都是可选的,我有以下错误:

来自“陪审团席位”的关系在 “已删除”状态。给定多重性约束,相应的 “陪审团插槽目标”也必须处于“已删除”状态

我的实体:

public class ApplicantTest
{
    [Key]
    public int Id { get; set; }

    // some other properties

    public virtual JurySlot JurySlot { get; set; }
}

public class JurySlot
{
    [Key]
    public int Id { get; set; }

    // some other properties

    public virtual Jury Jury { get; set; }

    public virtual ApplicantTest ApplicantTest { get; set; }
}

public class Jury
{
    [Key]
    public int Id { get; set; }

    public virtual ICollection<JurySlot> Slots { get; set; }
}
在调用Remove()之前,我尝试了注释的内容,但没有成功

有人有想法吗?

无法解释原因(我想这是EF的一个小谜团),但从相应的
DbSet
中删除就可以了:

...

//existing.Slots.Remove(lastSlot);
context.JurySlots.Remove(lastSlot);

context.SaveChanges();
执行以下命令:

UPDATE [dbo].[ApplicantTests]
SET [JurySlot_Id] = NULL
WHERE (([Id] = @0) AND ([JurySlot_Id] = @1))

DELETE [dbo].[JurySlots]
WHERE (([Id] = @0) AND ([Jury_Id] = @1))

您似乎有一个实体
curry\u Slot\u Target
,它与
curry\u Slot
有关系。谢谢,它可以工作!我不认为直接从上下文中删除。
...

//existing.Slots.Remove(lastSlot);
context.JurySlots.Remove(lastSlot);

context.SaveChanges();
UPDATE [dbo].[ApplicantTests]
SET [JurySlot_Id] = NULL
WHERE (([Id] = @0) AND ([JurySlot_Id] = @1))

DELETE [dbo].[JurySlots]
WHERE (([Id] = @0) AND ([Jury_Id] = @1))