实体框架核心:一对多关系

时间:2020-08-08 01:23:43

标签: c# asp.net-core .net-core

目前正在Entity Framework Core上进行一些学习,希望得到一些帮助,因为我被困了一段时间。

我有一套模型:

  • 用户(用户名,电子邮件,姓名等)
  • 学生(每个学生与用户之间都是一对一的关系,这只是为了提高可读性)

这是困扰我的部分:

  • 学校-每所学校都有一个管理员(用户),一个名称和一个班级/班级列表。
  • 学校班级-有一位老师(用户)和一组学生/学生列表。

我遇到的问题是如何建立这些模型并创建一个新模型,而不必在创建过程中将整个用户对象传递给班级/学校?例如。我的模型可能看起来像

class School 
{
    [Required]
    public string id {get; set;} 

    [Required]
    public User Admin {get; set;}

    [Required]
    public List<Student> Students {get; set;}

    [Required]
    public List<SchoolClass> Classes {get; set;}
}

(请注意,为方便起见,这很快就被扔到了一起)

如果被问到,我可以提供更多细节,但是我觉得我目前的整体做法略有错误。

基本上,每当我添加一个用户时,我都应该能够添加一个学生(可选),然后我应该能够创建学校,但是理想情况下,我不想获取/传递整个用户对象/列表最初创建学校时要上课->例如,我只想传递用户ID作为管理员。

然后,当我创建SchoolClass时,不需要创建新用户,我应该能够添加当前用户。不太确定该去哪里。

编辑:我已经弄清楚了,以后会更新帖子!

1 个答案:

答案 0 :(得分:1)

您可以使用null运算符(?)将其设置为可为空

public User? Admin {get; set;}

进行数据库调用时,将Admin User对象添加到School对象。但是,它不会将整个对象添加到数据库中。它将仅更新School表中的外键,除非您明确进行修改,否则Admin不会被标记为要修改。

另外请注意,由于使用Fluent API,属性逐渐被淘汰。