2012-01-09 59 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

相关问题