1

我有一个带有 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列表时,添加PlaningCourseAssistantAssistant导航键为空。

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

4

1 回答 1

2

EF 不能延迟加载“Assistant”属性,因为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();
于 2012-12-19T08:10:13.610 回答