gpt4 book ai didi

c# - 无法让级联删除在 EF 中工作

转载 作者:行者123 更新时间:2023-11-30 13:04:39 24 4
gpt4 key购买 nike

我在 SQL Server 后端之上有一个 Entity Framework 模型。

我有两个表,Treatment 和 Segment。 Treatment 与 Segment 是一对多的关系。在数据库中,我在表之间的外键关系上设置了级联删除设置,这样当删除一个 Treatment 时,它所有对应的 Segments 也会被删除。当我直接从数据库中删除治疗时,这项工作。

在 EF 模型中,我也将“End1 OnDelete”属性更改为“Cascade”。但是,每当我尝试删除治疗时,我都会收到以下错误:

“操作失败:无法更改关系,因为一个或多个外键属性不可为空。对关系进行更改时,相关的外键属性设置为空值. 如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。”

这是我删除治疗的代码:

public bool Delete(Treatment myTreatment)
{
bool result = false;

using (myEntities myObjectContext = new myEntities())
{
if (myTreatment.Treatment_ID == 0)
{
result = true;
}
else
{
if (myTreatment.EntityState == System.Data.EntityState.Detached)
{
myObjectContext.Treatments.Attach(myTreatment);
}
myObjectContext.ObjectStateManager.ChangeObjectState(myTreatment, System.Data.EntityState.Deleted);
}
result = (myObjectContext.SaveChanges() != 0);
}
return result;
}

我做错了什么?

编辑根据@Fauxtrot 的要求,这是协会的 CSDL。

<Association Name="TreatmentSegment">
<End Type="tamcModel.Treatment" Role="Treatment" Multiplicity="1" >
<OnDelete Action="Cascade" />
</End>
<End Type="tamcModel.Segment" Role="Segment" Multiplicity="*" >
</End>
<ReferentialConstraint>
<Principal Role="Treatment">
<PropertyRef Name="Treatment_ID" />
</Principal>
<Dependent Role="Segment">
<PropertyRef Name="Treatment_ID" />
</Dependent>
</ReferentialConstraint>
</Association>

最佳答案

在尝试了一下之后,我偶然发现了以下解决方案。我将它张贴在这里,以便将来可能遇到此问题的其他人可以查看解决方案。

我更改了以下行:

myObjectContext.ObjectStateManager.ChangeObjectState(myTreatment, System.Data.EntityState.Deleted);

对此:

myObjectContext.DeleteObject(myTreatment);

现在可以了....

嗯嗯....

关于c# - 无法让级联删除在 EF 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com