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