0

我在模型课上学习关系。有关表格关系,请参阅附图。有三个表,部门,员工,位置。当为这些表创建模型类时,我对导航属性感到困惑。员工等级:

public class employee
{
    public employee()
    {
        this.location = new HashSet<location>();
    }
    //attributes
    
    public virutal department department {get;set}
    public virtual ICollection<location> locations {get;set}
}

然后在部门班:

public class department
{
    //attributes
    public virutal ICollection<employee> employees {get;set}
}

在位置类中:

public class location
{
    public virutal employee employee {get;set}
}

为什么 in employeeclassdepartment被定义为 likevirutal department departmentlocation被定义为virtual ICollection<location> locations. 为什么ICollection只使用位置?

department模型中,employee类被定义为,virutal ICollection<employee> employees但在location模型中雇员被定义为virutal employee employee。为什么会这样,请澄清。

同样 in employeeclasslocation定义为HashSet<location>()in constructor,为什么要这样定义?这个导航属性让我在项目中继续前进感到困惑。请让我澄清一下。谢谢你!!!

在此处输入图像描述

4

1 回答 1

0

根据你分享的这个逻辑,它说

员工可以隶属于一个部门,但可以隶属于多个位置。这称为一对多关系

一个部门可以有多个员工 一个位置可以有一个员工。所以这意味着一个员工可以在多个地点工作,但地点只能有一个员工这也是一对多。

HashSet 是 C# 中的键值对数据类型。它类似于 JavaScript 中的对象;

ICollection 是一个通用接口。它需要一个类型,并且可以在内部保存多个值,就像 List 类型一样。但它没有添加、清除或包含等方法。为了拥有这些方法,您应该实现 IList 接口。

员工的构造函数在每次初始化时都会初始化一个位置哈希集。这意味着您初始化附加到它的位置的哈希集。(意味着在每个实例上,只需调用类对象)

并且您的属性前面的虚拟关键字会导致“延迟加载”

延迟加载

于 2021-07-29T13:10:43.410 回答