Entity framework 来自表单的MVC4 EF6映射参数

Entity framework 来自表单的MVC4 EF6映射参数,entity-framework,asp.net-mvc-4,Entity Framework,Asp.net Mvc 4,我在将从视图发送的表单数据映射到它设计的模型类时遇到问题 我有一个教师模型: public class Teacher : Person { [Required] [StringLength(50)] public String Title { get; set; } [Required] public DateTime DateOfApproval { get; set; } public ICollection<ThesisAppli

我在将从视图发送的表单数据映射到它设计的模型类时遇到问题

我有一个教师模型:

public class Teacher : Person
{
    [Required]
    [StringLength(50)]
    public String Title { get; set; }

    [Required]
    public DateTime DateOfApproval { get; set; }

    public ICollection<ThesisApplication> ManagerOf { get; set; }
}
以及用于它们之间连接的fluent API

modelBuilder.Entity<ThesisApplication>()
            .HasRequired( s => s.Manager ).WithMany(s => s.ManagerOf );
但是,当我像这样将表单传递给控制器中的create方法时

[HttpPost]
public ActionResult Create( ThesisApplication application )
{ ...
我获得了正确的managerId,但Manager属性为空(null)。尝试获取管理器的属性时引发异常

有人能解释为什么会这样吗。 我对不使用外键的解决方案感兴趣。差不多 DropDownFor(x=>x.Manager)在不使用外键的情况下映射Manager属性


谢谢:)

您从表单帖子中看到的对象是一个普通对象,由MVC模型绑定器在实体框架之外实例化。如果您想获得所表示的
教师
对象,则必须使用该方法(或
数据库集
中的任何其他方法):

@Html.DropDownListFor( x => x.ManagerId, (IEnumerable<SelectListItem>)( ViewBag.People  ) )
ViewBag.People = new SelectList(this.databaseEntities.Teachers.All(), "PersonId", "FirstName");
[HttpPost]
public ActionResult Create( ThesisApplication application )
{ ...
[HttpPost]
public ActionResult Create(ThesisApplication application )
{
    using(var context = new TeacherContext()) //or whatever/however you access your DbContext
    {
        var teacher = context.Teachers.Find(application.ManagerId);
    }
}