C# EF 5代码中的空导航优先
我有一个带有Entity Framework 5代码的应用程序首先这是我的类的示例:C# EF 5代码中的空导航优先,c#,asp.net,ef-code-first,entity-framework-5,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 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; }
}
及
之后,当我想要获取planningcourseasistant
列表时,添加的planningcourseasistant
的Assistant
导航键为空
为什么会这样?如何解决此问题?EF无法延迟加载“助手”属性,因为您使用的
Planning CourseAssistant
实例不是EF创建的代理
您可以使用显式加载
context.Entry(pcb).Reference(p => p.Assistant).Load();
context.Entry(pcb.Assistant).Collection(p => p.PlaningCourseAssistant).Load();
或者让EF创建一个planningcourseasistant
var pcb = context.PlaningCourseAssistants.Create();
@Raika EF创建实体的子类,以添加延迟加载导航属性所需的逻辑。这些被称为代理。
Create
方法有帮助。但是如果我想使用它,我需要修改很多代码。有没有办法将我的对象转换为代理对象,而不丢失任何数据?我的意思是创建一个planningcourseasistants
对象并填充其数据。现在我想将其转换为具有相同数据的代理对象。有可能吗?@Raika没有。你已经创建了一个泄漏的抽象。你可以在你的uow
中添加一个Create
方法,该方法调用底层的DbSet.Create
。是的,我在提问后通过搜索和测试找到了答案。是时候更改代码了。非常感谢你
var pcb = new PlaningCourseAssistant
{
PlaningCourseID = CourseID,
AssistantID = assistantID,
};
try
{
planingCourseAssistantService.Add(pcb);
uow.SaveChanges();
} catch { }
context.Entry(pcb).Reference(p => p.Assistant).Load();
context.Entry(pcb.Assistant).Collection(p => p.PlaningCourseAssistant).Load();
var pcb = context.PlaningCourseAssistants.Create();