Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF 5代码中的空导航优先_C#_Asp.net_Ef Code First_Entity Framework 5 - Fatal编程技术网

C# EF 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; }

我有一个带有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; }
} 

之后,当我想要获取
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();