Code First和EF 5.0未加载导航属性

时间:2013-03-11 15:45:23

标签: c# entity-framework ef-code-first

我试图通过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

4 个答案:

答案 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; }
}