Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何定义构成(老板、下属关系)_.net_Entity Framework_Uml - Fatal编程技术网

.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,真正的问题是不同的。这个模型说每个人都有一个老板。你确定那是真的吗?