实体框架代码数据库设计的第一个模型

时间:2015-03-11 20:37:08

标签: c# entity-framework ef-code-first entity-framework-6

我正在努力理解EF(使用EF6)。我想把代码放在第一条路线上,因为这似乎是趋势。我想要做的是弄清楚如何对EF模型中的多个连接表进行建模。

我的主要实体是员工和学校。一名工作人员可以在多个角色(计算机,一年级,历史,监护人等)的多个学校工作。

一个例子:老师鲍勃琼斯在杜鲁门小学的林肯小学和阿尔法科学教授计算机。

从数据库表设计中,我可能会有以下表: - 工作人员 - 学校 - StaffRole - 具有不同角色的查找表 - SchoolStaffRole - 加入员工,学校,& StaffRole

但是,我不太确定我的EF型号会是什么样子。我从以下开始,但显然没有正确的关系。什么是有效的方法?是否需要一个SchoolStaffRole课程以及那些在职员和学校模型中引用的内容?

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;}
}

2 个答案:

答案 0 :(得分:0)

如果你想先学习代码,我找到的最快的方法就是让EF为你生成代码第一个代码..然后探索生成的代码。将实体数据模型添加到项目中时,首先从数据库中选择代码。

答案 1 :(得分:0)

如果可以将您尝试映射的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;}

}