我試圖刪除其中一個實體,但我收到了一個奇怪的錯誤。SaveChanges上的InvalidOperationException異常
我的代碼刪除一個看起來是這樣的:
public bool Delete()
{
using (var context = new DbContext())
{
context.Set(this.GetType()).Attach(this);
context.Entry(this).State = EntityState.Deleted;
context.SaveChanges();
}
}
這個方法是我的實體的一部分,它自身附加(當前實體)並改變該國刪除。
上線context.SaveChanges();我收到錯誤消息:
翻譯留言(我自己翻譯):
執行被中止:關係無法改變,因爲爲atleast一個外鍵屬性沒有NULL值被允許。當關系被修改時,相關的foreignkey屬性被設置爲NULL值。如果foreignkey不支持NULL值,則必須指定新的關係或將foreignkeyproperty設置爲不同的NON-NULL值,否則將刪除不相關的對象。
原始消息:
明鏡Vorgang IST fehlgeschlagen:模具Beziehung konnte nicht修訂於werden,噠獻給mindestens EINE DERFremdschlüsseleigenschaftenkeine NULL-Wertezulässig信德。 Wenn eine Beziehunggeändertwird,wird die verwandteFremdschlüsseleigenschaftauf einen NULL-Wert festgelegt。 Wenn derFremdschlüsselkeine NULL-Werteunterstützt,muss eine neue Beziehung definiert,dieFremdschlüsseleigenschafteinem anderen Nicht-NULL-Wert zugeordnet oder das nicht verwandte Objektgelöschtwerden。
當我附加我的對象的關係似乎是intakt,一旦我將狀態更改爲刪除NavigationProperties設置爲NULL,但爲什麼EF試圖改變關係時,我只需要一個簡單的刪除命令?
編輯:
如在下面的意見建議。 我已經將我的表之間的關聯設置爲具有層疊刪除,但由於某些原因它被忽略。
那我協會的樣子:
End1 Multiplicity - 1 (One of TabAdjust)
End1 Navigation Property - TabAdjustAccounts
End1 OnDelete - Cascade
End1 Role Name - TabAdjsut
End2 Multiplicity - * (collection of TabAdjustAccount)
End2 Navigation Property - TabAdjust
End2 OnDelete - None
End2 Role Name - TabAdjustAccount
Name - CS_TABADJUSTTABADJUSTACCOUNT
Referential Contraint - TabAdjust -> TabAdjustAccount
它是一種1:N的關係TabAdjust和之間 TabAdjustAccount。
在我的示例中,我試圖刪除TabAdjust,在將TabAdjustAccounts屬性包含項目之前,將狀態更改爲刪除狀態後,將刪除TabAdjustAccounts導航屬性。
EDIT2:
我使用數據庫第一種方法。
EDIT3:
見我的回答如下也許可以解釋爲什麼這種變化有差別。
這是說,你要刪除一個「父」例如,當一個或多個「子」情況依然存在正式的方式。 – dasblinkenlight
@dasblinkenlight但是,爲什麼改變狀態刪除清除所有引用,如果它不會這樣做,刪除級聯應該踢,但不是這種情況。 –
您是否在EF中啓用了級聯刪除選項? – dasblinkenlight