空导航在EF 5代码优先

时间:2012-12-19 07:14:35

标签: c# asp.net ef-code-first entity-framework-5

我有一个带有Entity Framework 5代码的应用程序 - 首先这是我的类的示例:

public partial class PlaningCourseAssistant 
{
    public PlaningCourseAssistant() {}
    public int ID { get; set; }
    public int PlaningCourseID { get; set; }
    public int AssistantID { get; set; }

    public virtual PlaningCourse PlaningCourse { get; set; }
    public virtual Teacher Assistant { get; set; }
} 

public class Teacher 
{
    public Teacher() 
    {
        ...
        this.PlaningCourseAssistants = new HashSet<PlaningCourseAssistant>();
    }
    public int ID { get; set; }
    public string Name{ get; set; }
    ....
    public virtual ICollection<PlaningCourseAssistant> PlaningCourseAssistants { get; set; }
}

public partial class PlaningCourse 
{
    public PlaningCourse() 
    {
    ...
        this.PlaningCourseAssistants = new HashSet<PlaningCourseAssistant>();
    }
    public int ID { get; set; }
    public string Title { get; set; }
    ...
    public virtual ICollection<PlaningCourseAssistant> PlaningCourseAssistants { get; set; }
}

当我向我的PlaningCourseAssistant添加一个新对象时:

var pcb = new PlaningCourseAssistant 
{
    PlaningCourseID = CourseID,
    AssistantID = assistantID,
};
try 
{
    planingCourseAssistantService.Add(pcb);
    uow.SaveChanges();
} catch { }

之后当我想获得PlaningCourseAssistant列表时,添加的PlaningCourseAssistant的{​​{1}}导航键为空。

为什么会这样?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

EF无法延迟加载“助理”属性,因为您使用的PlaningCourseAssistant实例不是由EF创建的代理。

您可以使用显式加载

context.Entry(pcb).Reference(p => p.Assistant).Load();
context.Entry(pcb.Assistant).Collection(p => p.PlaningCourseAssistant).Load();

或者让EF创建PlaningCourseAssistant

的代理实例
var pcb = context.PlaningCourseAssistants.Create();