Как спроектировать отношения один ко многим в efcore? - PullRequest
0 голосов
/ 22 января 2020

Привет, я работаю над ядром платформы сущностей. У меня есть таблица пользователя, и пользователь может быть частью нескольких проектов. И пользователь для каждого проекта должен ввести данные табеля. Например, ниже приведена таблица моего пользователя.

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 что-то, что я должен определить здесь. Может ли кто-нибудь помочь мне понять это? Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

2 голосов
/ 22 января 2020

Предполагая, что вы будете менять строку на int ids, работает ли что-то ниже?

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 Project()
    {
        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; }
}
...