Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
Entity framework 6 导航属性未加载-急切加载_Entity Framework 6_Eager Loading - Fatal编程技术网

Entity framework 6 导航属性未加载-急切加载

Entity framework 6 导航属性未加载-急切加载,entity-framework-6,eager-loading,Entity Framework 6,Eager Loading,我对实体框架几乎没有经验。我试图使用渴望加载,但似乎我做错了什么 虽然我在查询中使用了“include”,但Department类的导航属性“Subjects”没有加载 下面可以找到2个POCO、DBContext和Main方法 输出只是该系的标题(“计算机科学”),而不是显示相关主题(“Java”、“C#”、“C++”) 公共课部 { 公共部门() { Subjects=newhashset(); } 公共int ID{get;set;} 公共字符串标题{get;set;} 公共ICollec

我对实体框架几乎没有经验。我试图使用渴望加载,但似乎我做错了什么

虽然我在查询中使用了“include”,但Department类的导航属性“Subjects”没有加载

下面可以找到2个POCO、DBContext和Main方法

输出只是该系的标题(“计算机科学”),而不是显示相关主题(“Java”、“C#”、“C++”)

公共课部
{
公共部门()
{
Subjects=newhashset();
}
公共int ID{get;set;}
公共字符串标题{get;set;}
公共ICollection主题{get;set;}
}
公共课科目
{
公共主题()
{
a部门=新部门();
}
公共int ID{get;set;}
公共字符串标题{get;set;}
public int DepartmentID{get;set;}
公共部门部门{get;set;}
}
公共类ModelDB:DbContext
{
public ModelDB():base(“name=ModelDB”)
{
Configuration.LazyLoadingEnabled=false;
Configuration.ProxyCreationEnabled=true;
}
公共数据库集部门{get;set;}
公共数据库集主题{get;set;}
}
静态void Main(字符串[]参数)
{
ModelDB=newmodeldb();
/*
Department dep=new Department(){ID=1,Title=“计算机科学”};
db.Departments.Add(dep);
db.SaveChanges();
Subject s1=new Subject(){ID=1,Title=“Java”,aDepartment=dep};
db.受试者。添加(s1);
db.SaveChanges();
Subject s2=new Subject(){ID=2,Title=“C#”,aDepartment=dep};
db.受试者。添加(s2);
db.SaveChanges();
Subject s3=new Subject(){ID=3,Title=“C++”,aDepartment=dep};
db.Subjects.Add(s3);
db.SaveChanges();
*/
var lstDepartments=db.Departments.Include(“主体”);
foreach(部门中的var d)
{
控制台。书写线(d.标题);
var ss=d.受试者;
foreach(ss中的var s)
{
控制台。书写线(s.标题);
}
}
Console.WriteLine(“按任意键退出…”);
Console.ReadKey();
}

主要问题是您正在初始化引用导航属性(
aDepartment=new Department();
),这会混淆EF基础结构并阻止其正常工作。初始化集合导航属性是可以的(虽然不是强制性的),但决不要对引用导航属性进行初始化

主题
构造函数中删除上述行将解决此问题。此外,尽管它在某种程度上在您的情况下有效(令我惊讶),但最好遵循命名约定,不要调用导航属性
aDepartment
,而只调用
Department
,以与
DepartmentID
FK属性对齐

以下是
主体
实体的更正工作版本:

public class Subject
{
    public int ID { get; set; }
    public string Title { get; set; }
    public int DepartmentID { get; set; }
    public Department Department { get; set; }
}

主要问题是您正在初始化引用导航属性(
aDepartment=new Department();
),这会混淆EF基础结构并阻止其正常工作。初始化集合导航属性是可以的(虽然不是强制性的),但决不要对引用导航属性进行初始化

主题
构造函数中删除上述行将解决此问题。此外,尽管它在某种程度上在您的情况下有效(令我惊讶),但最好遵循命名约定,不要调用导航属性
aDepartment
,而只调用
Department
,以与
DepartmentID
FK属性对齐

以下是
主体
实体的更正工作版本:

public class Subject
{
    public int ID { get; set; }
    public string Title { get; set; }
    public int DepartmentID { get; set; }
    public Department Department { get; set; }
}

我觉得你可能没有告诉EF外键是什么。告诉EF此链接的映射类在哪里?如果您没有此功能,请在主题的Department navigation属性上方添加[ForeignKey(“DepartmentID”)]属性,然后查看这是否解决了您的问题(新部门或否):

我觉得您可能没有告诉EF外键是什么。告诉EF此链接的映射类在哪里?如果您没有此功能,请在主题的Department navigation属性上方添加[ForeignKey(“DepartmentID”)]属性,然后查看这是否解决了您的问题(新部门或否):