Mar*_*ijn 12 c# entity-framework ef-code-first asp.net-mvc-3
我有一个MVC项目,并为数据库使用Entity Framework Code First和POCO对象.例如:
public class ClassA
{
public int? Id {get; set;}
public string Name { get; set;}
public virtual ClassB B {get; set;}
}
public class ClassB
{
public int? Id {get;set;}
public string Description {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我有一个ActionResult,可以创建或编辑模型.问题是当我调用此ActionResult更新模型并且model.B已更改时,关系不会保存在数据库中.当调用ActionResult来创建一个新对象时,它按预期工作.我该如何解决这个问题?
public ActionResult Save(ClassA model)
{
model.B = GetBFromDb(model.B.Id.Value);
if(ModelState.IsValid)
{
if (id.HasValue)
{
context.Entry(model).State = System.Data.EntityState.Modified;
}
else
{
context.ClassAs.Add(model);
}
context.SaveChanges();
// redirect to index etc.
}
return View("EditForm", model);
}
Run Code Online (Sandbox Code Playgroud)
我通过将ClassA外键更改为ClassB并设置 的值来解决这个问题BId:
public class ClassA
{
public int? Id {get; set;}
public string Name { get; set;}
public int BId {get;set;} // foreign key to B
public virtual ClassB B {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
为什么这个外键属性而不是 EF 生成的外键来完成这项工作?