我试图通过Code First和EF 5.0加载导航属性子对象加载为null。下面是代码。
[Table("ls_roles")]
public class Role
{
[Required]
[Key]
public int RoleID { get; set; }
[Required]
public String BarColor { get; set; }
[ForeignKey("RoleId")]
public virtual ICollection<ScheduleEmployee> Employees { get; set; }
}
[Table("ls_ScheduleEmployee")]
public class ScheduleEmployee
{
[Key]
[Required]
public int Id { get; set; }
[Required]
public int RoleId { get; set; }
[ForeignKey("RoleId")]
public Role Role { get; set; }
}
编辑:调用代码
class Program
{
static void Main(string[] args)
{
var x = new Model.ContextEntityFramework().ScheduleEmployees.FirstOrDefault();
}
}
x.Role ==此时为null
答案 0 :(得分:8)
为了使延迟加载工作,应该将类上的所有属性定义为虚拟。这是Entity Framework创建支持延迟加载的代理对象所必需的。
有关详细信息,请参阅here。
答案 1 :(得分:7)
您必须对您的主叫代码执行.include以包含子项。
类似
Model.ContextEntityFramework().ScheduleEmployees.Include(x => x.Role).FirstOrDefault();
答案 2 :(得分:1)
您的Role
课程不需要在ForeignKey
集合中使用Employees
属性。 EF将自动知道根据ScheduleEmployee
对象及其对ForeignKey
属性的使用进行映射。
答案 3 :(得分:0)
[Table("ls_roles")]
public class Role
{
[Required]
[Key]
public int RoleID { get; set; }
[Required]
public String BarColor { get; set; }
public virtual ICollection<ScheduleEmployee> Employees { get; set; }
}
[Table("ls_ScheduleEmployee")]
public class ScheduleEmployee
{
[Key]
[Required]
public int Id { get; set; }
[Required]
[ForeignKey("Role")]
public int RoleId { get; set; }
public virtual Role Role { get; set; }
}