Entity framework 6 导航属性未加载-急切加载
我对实体框架几乎没有经验。我试图使用渴望加载,但似乎我做错了什么 虽然我在查询中使用了“include”,但Department类的导航属性“Subjects”没有加载 下面可以找到2个POCO、DBContext和Main方法 输出只是该系的标题(“计算机科学”),而不是显示相关主题(“Java”、“C#”、“C++”)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
公共课部
{
公共部门()
{
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”)]属性,然后查看这是否解决了您的问题(新部门或否):