use*_*622 3 c# entity-framework entity-framework-6
我有MVC项目和EF6模型.
LazyLoading已启用.在控制器中我有以下动作
public ActionResult AddStage(int projectId, int employeeId)
{
using(var context = new TestProjectEntities())
{
var project = context.Projects.Find(projectId);
if (project != null)
{
var stage = new Stage() {EmployeeID = employeeId, StageType = 1};
project.Stages.Add(stage);
context.Stages.Add(stage);
context.SaveChanges();
}
ListEmployees(project);
}
return Redirect("Index");
}
private void ListEmployees(Project project)
{
var names = new List<string>();
foreach(var stage in project.Stages)
{
if (stage.Employee != null)
{
names.Add(stage.Employee.Name);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是在foree语句中的ListEmployees方法stage.Employee == null中.为什么?
如果我第二次调用AddStage,那么ListEmployee中的stage.Employee!= null
那是因为你只需设置外键属性(Stage.EmployeeID)而不设置navigation-property(Stage.Employee).
通常,在调用之后SaveChanges(),EF也会更新导航属性.但是,由于Stage对象是由您手动创建的,因此不会对其进行跟踪(使用DynamicProxy),您必须明确修复关系:
context.Entry(stage).Reference(c => c.Employee).Load();
Run Code Online (Sandbox Code Playgroud)
另一种方法是获取Employee并使用它而不是设置外键属性:
var employee = context.Employees.Find(employeeId);
var stage = new Stage() { Employee = employee, StageType = 1};
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |