2013-08-01 19 views
0

我有以下代碼:代碼首先EF刪除ID爲唯一和

public void Remove(Guid id) 
{ 

    var symbol = new Symbol() 
       { 
        Id = id 
       }; 
    _ctx.Entry(symbol).State = EntityState.Deleted; 
    _ctx.SaveChanges(); 
} 

符號實體有稱爲「A類」相關實體。它沒有設置爲級聯刪除,因爲它是來自查找表的值。我想單獨離開類別,但是當它運行時,它會拋出DbUpdateException: 'HourlyContext.Symbols'中的實體參與'Symbol_Category'關係。找到0個相關的'Symbol_Category_Target'。預計1'Symbol_Category_Target'。

據我所知,EF對如何處理關係感到困惑,我該如何告訴它簡單地放棄對類別的引用並繼續並刪除符號?

謝謝。

編輯

好了,所以我試圖加入一個可空的CategoryId as shown here使得外鍵可以爲空(僅供參考我使用的代碼第一實體框架):

public class Symbol : EntityBase 
{ 
    [Required] 
    public string CompanyName { get; set; } 

    public int? CategoryId { get; set; } 

    [Required] 
    public MarketCategory Category { get; set; } 
} 

但是,創建一個遷移後並更新數據庫,這不會解決異常。

編輯2

好了,所以事實證明,(回頭現在是顯而易見的),添加了「需要」屬性防止列被空。現在我的意圖是不允許編碼器(即我)在代碼中意外地將關係設置爲null,但是當我通過Id刪除對象時,允許框架將它清空。看來這不能做到。所以我需要做的是刪除必需的屬性(並省略'categoryId'列)。

回答

0

EF必須存在外鍵關係。檢查簡單的方法是使用SQL服務器,上海管理Studio和檢查相關性在桌子上

Right click on table and select Show dependencies

0

要做到這一點,我覺得分類表的外鍵列(符號ID,無論...)應可空。數據庫表的OndDelete動作也應該設置爲null。

然後,EF可以簡單地刪除該符號。