2012-01-09 64 views
1

我有一個供應商實體,每個供應商對象可能引用另一個供應商對象作爲其「父」。實體框架4.1代碼優先 - 無法刪除兩個實體之間的關係

public class Supplier 
{ 
    public int? Id { get; set; } 

    public virtual Supplier Parent { get; set; } 
} 

這一切都如預期,直到我試圖刪除的關係,如,供貨商不再有父的作品。我可以將它從null更改爲特定的供應商,我可以將其設置爲不同的供應商,但將其設置爲null不會在SaveChanges()後保留。

supplier.Parent = null; 

供應商表中的外鍵「ParentId」被設置爲可空。明確定義關係並沒有幫助。

modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany(); 

我敢肯定我錯過了一些明顯的東西。

回答

3

剛剛發現我的代碼,我做同樣的事情(的作品),另一個地方,發現這一點;

// Must access property (trigger lazy-loading) before we can set it to null (Entity Framework bug!!!) 
var colour = modelItem.Colour; 
modelItem.Colour = null; 

在新代碼中做了同樣的事情,它的一切工作。

1

,而不是僅僅modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany();使用以下modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany().HasForeignKey(x=>x.ParentId); 否則它不知道外鍵的名稱是

+0

我們不使用外鍵屬性,即ParentId – SeeNoWeevil 2012-01-09 11:26:06

+0

有沒有什麼好的理由不? – 2012-01-09 12:38:12

+0

我有同樣的問題,斯蒂芬是正確的,你必須定義一個外鍵。見亞瑟維克斯的帖子在這裏:http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/35e7438b-ec1f-4d1f-bca0-539ccfb9abb1/ – Marthijn 2012-01-09 12:43:16

相關問題