如何定义构图(老板,下属关系)

时间:2015-06-12 07:19:33

标签: .net entity-framework uml

我想定义经常性的构图关系。如果从系统中删除了老板,则通过级联更新删除所有下属。

我的意思是:

我应该如何在代码中说明它?

public class Person{
     public int Id {get;set;}
     public virtual Person Person {get;set}
}

这可能在实体框架中吗?

1 个答案:

答案 0 :(得分:1)

据我所知,它没有在任何地方记录,但实体框架只创建/更新/删除已加载的实体

因此,如果您加载Person并将其删除,那么如果此Person有下属,您将收到外键违规错误。 EF不会自动更新这些子记录(将其FK设置为​​null)。

但是,如果您加载Person 其下属并删除Person,则EF会取消每个孩子的外键。

为了使这种加载更容易,您应该稍微修改Person类:

public class Person
{
    public int Id { get; set; }

    public virtual Person Boss { get; set; }

    [InverseProperty("Boss")] // Use one FK field for Boss and Subordinates 
    public virtual ICollection<Person> Subordinates { get; set; }
}

现在您可以加载PersonInclude() Subordinates

顺便说一句,您无法指定级联删除/更新规则,因为Sql Server不接受循环级联路径。