Entity Framework 来自数据库设计的 Code First 模型

Entity Framework Code First model from Database design

我正在努力了解 EF(使用 EF6)。我想走代码优先路线,因为这似乎是趋势。我想做的是弄清楚如何在 EF 模型中对多重连接 table 进行建模。

我的主要实体是教职工和学校。一名工作人员可以在多所学校担任多个角色(计算机、一年级、历史、管理员等)。

举个例子:Bob Jones 老师在林肯小学教授计算机,在杜鲁门小学教授阿尔法科学。

根据数据库 table 设计,我可能会有 table 用于: - 职员 - 学校 - StaffRole - 查找 table 不同的角色 - SchoolStaffRole - 加入教职员工、学校和 StaffRole

但是,我不太确定我的 EF 模型会是什么样子。我从以下开始,但显然没有正确建立关系。什么是有效的方法?是不是我需要一个 SchoolStaffRole class 而这就是 Staff 和 School 模型中引用的内容?

class School
{
    int ID{get;}
    virtual ICollection<Staff> Staff{get;set;}
}
class Staff : Member
{
    int ID{get;}
    virtual ICollection<School> Schools{get;set;}
    virtual ICollection<SchoolRole> Roles{get;set;}
}

如果您想先学习代码,我发现最快的方法是让 EF 为您先生成代码。然后探索生成的代码。当您将实体数据模型添加到您的项目时,select 首先从数据库编码。

如果可以将您尝试映射到您的问题的 SQL 表添加到您的问题中,将会很有用

尽可能避免继承,Staff :Member 不会很有趣

无论如何都试一试

public class Staff : Member
{
    public int ID{get;set;}

}
public class School 
{
    public int ID{get;set;}

}


public class SchoolStaff 
{
    public int ID{get;set;}

    [ForeignKey("School")]
    public int SchoolID {get;set;}
    [ForeignKey("SchoolID")]
    public virtual School School {get;set;}

    [ForeignKey("Staff")]
    public int StaffID {get;set;}
    [ForeignKey("StaffID")]
    public virtual Staff Staff {get;set;}

    virtual ICollection<SchoolStaffRole> Roles{get;set;}
}


 public class SchoolStaffRole 
{
    public int ID{get;set;}

    [ForeignKey("SchoolStaff")]
    public int SchoolStaffID {get;set;}
    [ForeignKey("SchoolStaffID")]
    public virtual SchoolStaff SchoolStaff {get;set;}

    [ForeignKey("SchoolRole")]
    public int SchoolRoleID {get;set;}
    [ForeignKey("SchoolRoleID")]
    public virtual SchoolRole SchoolRole {get;set;}

}