实体框架6 asp.net代码优先设置

本文关键字:设置 代码 net 框架 asp 实体 | 更新日期: 2023-09-27 18:19:16

嗨,伙计们,我正在纺车。我正在使用EF6和ASP。Net 4.6。我有一个给定的表,其中包含学生信息和家长信息。一个学生可以有很多父母,一个父母可以有很多学生。称此表为"Contact"。我要创建一个名为"请求"的表,它将保存家长为其学生提交请求的信息。我将创建一个包含两列的查找表,一列用于学生id,另一列用于家长id,名为"StudentParents"。我希望能够让家长登录,从所有学生的下拉菜单中选择他的学生,并提交请求。多对多的关系让我在include语句中迷失了方向。我怎样才能让EF设置这个结构,以便当我GetRequest(id)时,我可以获得要包含的学生信息和家长信息?这是我的代码,不包括任何其他的请求。

    public class Contact
{
   [Key]
    public int id { get; set; }
    public string student_id { get; set; }//This is the Student ID
    public string last_name { get; set; }
    public string first_name { get; set; }
    public string middle_initial { get; set; }
    public string grade { get; set; }
    public int current_school_id { get; set; }
    public string current_school_name { get; set; }
    [Display(Name = "Parent Last Name")]
    public string contact_first_name { get; set; }
    [Display(Name = "Parent Middle Name")]
    public string contact_middle_name { get; set; }
    [Display(Name = "Parent Last Name")]
    public string contact_last_name { get; set; }
    public string contact_relationship { get; set; }
    [Display(Name = "Parent Email")]
    public string contact_email { get; set; }
    [Display(Name = "Parent Address")]
    public string login { get; set; }//This is the Parent ID
    public string Classif_description { get; set; }
}
 public class Request
{
    [Key]
    public int id { get; set; }
    public Student student_id { get; set; }
    public Contact login { get; set; }
    [Display(Name = "First School Choice")]
    public string firstSchool { get; set; }
    [Display(Name = "Second School Choice")]
    public string secSchool { get; set; }
    [Display(Name = "Rising Grade")]
    public string rising_grade { get; set; }
    public DateTime ReqSubmitted { get; set; }
    public string ReqStatus { get; set; }
    public DateTime Created { get; set; }
    public DateTime Modified { get; set; }
    public string ModifBy { get; set; }
}
    public class Parent
{
    public int id { get; set; }
    public string contact_first_name { get; set; }
    public string contact_middle_name { get; set; }
    public string contact_last_name { get; set; }
    public string contact_relationship { get; set; }
    public string contact_email { get; set; }
    public string contact_address { get; set; }
    public string contact_city { get; set; }
    public string contact_zip { get; set; }
    [Key]
    public string login { get; set; }
    public string contact_pw { get; set; }
    public string phone { get; set; }
    public string phone_type { get; set; }
    public Parent() { }
    public virtual ICollection<Student> Students { get; set; }

}
   public class Student
{
    [Key]
    public int id { get; set; }
    public int student_id { get; set; }
    public string last_name { get; set; }
    public string first_name { get; set; }
    public string middle_initial { get; set; }
    public DateTime birthdate { get; set; }
    public string gender { get; set; }
    public string grade { get; set; }
    public string Fed_race_description { get; set; }
    public string Classif_description { get; set; }
    public int current_school_id { get; set; }
    public string current_school_name { get; set; }
    public int home_school_id { get; set; }
    public string home_school_name { get; set; }
    public Student()
    {
        this.Parents = new HashSet<Parent>();
    }
    public virtual ICollection<Parent> Parents { get; set; }
}
 public class OEContext : DbContext
{
    public OEContext() : base("name=OEContext")
    {
    }
    public DbSet<Request> Requests { get; set; }
    public DbSet<Parent> Parents { get; set; }
    public DbSet<Contact> Contacts { get; set; }
    public DbSet<Student> Students { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Parent>()
            .HasMany(s => s.Students)
            .WithMany()
            .Map(x =>
            {
                x.MapLeftKey("login");
                x.MapRightKey("student_id");
                x.ToTable("StudentParents");
            }
            );
        base.OnModelCreating(modelBuilder);
    }
}

实体框架6 asp.net代码优先设置

改变策略。请求有多个联系人。所以我给请求添加了一个构造函数:

public Request()
{
    Contacts = new List<Contact>();
}
public virtual ICollection<Contact> Contacts { get; set; }

接下来我更改了联系人类:

public int ContactId { get; set; }
public Contact() { }
public virtual Request Request { get; set; }

有了这个关系,我可以从与请求相关联的联系人中拉出家长和学生。