实体框架4.1代码优先 - 无法删除两个实体之间的关系

时间:2012-01-09 10:37:27

标签: entity-framework entity-framework-4.1 ef-code-first

我有一个Supplier实体,每个Supplier对象可以引用另一个Supplier对象作为其“父”。

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

    public virtual Supplier Parent { get; set; }
}

这一切都按预期工作,直到我尝试删除关系,因为此供应商不再有父母。我可以将它从null更改为特定供应商,我可以将其设置为其他供应商,但在SaveChanges()之后不会将其设置为null。

supplier.Parent = null;

Supplier表中的外键'ParentId'设置为可为空。明确定义这种关系并没有帮助。

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

我确定我错过了一些明显的东西。

2 个答案:

答案 0 :(得分: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 :(得分:1)

而不只是modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany();使用以下modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany().HasForeignKey(x=>x.ParentId); 否则它不知道外键的名称是什么