如何在efcore中设计一对多关系?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在efcore中设计一对多关系?相关的知识,希望对你有一定的参考价值。

[嗨,我正在研究实体框架核心。我有用户表,用户可能是多个项目的一部分。每个项目的用户都必须输入时间表数据。例如下面是我的用户表。

public class User
    
        [Key]
        public string Id  get; set; 
        public string name  get; set; 
        public string emailId  get; set; 
    

下面是我的项目表。

 public class Project
    
        [Key]
        public string Id  get; set; 
        public string Name  get; set; 
        public string userId  get; set; 
    

这里用户可能属于多个项目。现在,对于每个项目,用户都必须输入时间表数据。下面是时间表表。

public class TimeSheetData
    
        [Key]
        public string id  get; set; 
        public string project_id  get; set; 
        public string hours_logged  get; set; 
    

我必须在实体框架核心中对此进行定义。一个用户可能是多个项目的一部分,并且用户需要为每个项目的时间表输入数据。如何定义与上表的关系?

在用户表中,我是否需要添加类似Public List<Project> Projects的内容?同样在项目表Public List<Timesheet> Timesheets中,我必须在此处定义一些内容。有人可以帮助我理解这一点吗?任何帮助将不胜感激。谢谢

答案

假设您将字符串更改为int id,下面的方法有用吗?

public class User

    public User()
    
        this.Projects = new HashSet<Project>();
    
    [Key]
    public int Id  get; set; 
    public string name  get; set; 
    public string emailId  get; set; 
    public virtual ICollection<Project> Projects  get; set;


public class Project
   
    public User()
    
        this.TimeSheetData = new HashSet<TimeSheetData>();
    
    [Key]
    public int Id  get; set; 
    public string Name  get; set; 
    public int userId  get; set; 
    [ForeignKey("userId")]
    public virtual User User get; set; 
    public virtual ICollection<TimeSheetData> TimeSheetData  get; set;


public class TimeSheetData

    [Key]
    public int id  get; set; 
    public int project_id  get; set; 
    [ForeignKey("project_id")]
    public virtual Project Project get; set; 
    public string hours_logged  get; set; 

以上是关于如何在efcore中设计一对多关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何在greenDAO中设置一对多的关系?

如何在 Core Data 中设置一对多关系的排序?

EF Core / Sqlite 一对多关系在唯一索引约束上失败

EF Core 2.1:具有一对多关系的自引用实体生成附加列

需要在 Laravel 4 的同一张表中设置一对多关系

Cassandra中的一对多映射