4
我有一個實體框架模型在SQL服務器後端。無法級聯刪除在EF中工作
我有兩個表格,Treatment和Segment。治療與分部有一對多的關係。在數據庫中,我對錶之間的外鍵關係進行級聯刪除設置,以便在刪除處理時,它的所有對應的段也會被刪除。這項工作,當我直接從數據庫中刪除治療。
在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;
}
我在做什麼錯?
編輯 這裏是CSDL每@ Fauxtrot要求協會。
<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>
難道是有可能看到你的CSDL爲這個特定的協會? –
您應該在數據庫中指定級聯刪除並更新您的EF模式。 EF將負責其餘的事情。 –
@哈桑你能澄清一下嗎?我有在數據庫中指定的級聯刪除。 EF不應該自動查看並更新關係本身?似乎有一種直觀的手動更新EF模式,但如果是這樣的話,你如何建議我這樣做?我將該實體標記爲刪除。你是說我應該遍歷所有的子元素並將其實體狀態更改爲刪除?如果這些孩子元素也有他們自己的孩子元素呢?然後,我必須繼續遍歷子元素層以正確更新架構? –