.net 如何定义构成(老板、下属关系)
我想定义循环组合关系。如果老板被从系统中删除,那么他的所有下属都将被级联更新删除 我的意思是: 我应该如何在代码中声明它.net 如何定义构成(老板、下属关系),.net,entity-framework,uml,.net,Entity Framework,Uml,我想定义循环组合关系。如果老板被从系统中删除,那么他的所有下属都将被级联更新删除 我的意思是: 我应该如何在代码中声明它 public class Person{ public int Id {get;set;} public virtual Person Person {get;set} } 这在实体框架中可能吗?据我所知,它在任何地方都没有文档记录,但实体框架只创建/更新/删除它加载的实体 因此,如果加载一个Person并将其删除,如果该Person有下属,则会出现
public class Person{
public int Id {get;set;}
public virtual Person Person {get;set}
}
这在实体框架中可能吗?据我所知,它在任何地方都没有文档记录,但实体框架只创建/更新/删除它加载的实体 因此,如果加载一个
Person
并将其删除,如果该Person
有下属,则会出现外键冲突错误。EF不会自动更新这些子记录(将其FKs设置为null)
但是,如果加载人员
及其下属并删除人员
,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; }
}
公共类人物
{
公共int Id{get;set;}
公共虚拟人Boss{get;set;}
[InverseProperty(“老板”)]//为老板和下属使用一个FK字段
公共虚拟ICollection下属{get;set;}
}
现在,您可以加载人员
和Include()
其下属
顺便说一句,您不能指定级联删除/更新规则,因为Sql Server不接受循环级联路径。在我看来,1:n关联过于严格,无法描述人与人之间的关联。难道没有人会碰巧有两个老板吗?如果你做这么多对多,你只需要删除连接记录。@GertArnold这只是一个sscce,真正的问题是不同的。这个模型说每个人都有一个老板。你确定那是真的吗?