3

我正在尝试通过 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

4 回答 4

8

为了使延迟加载起作用,类上的所有属性都应该定义为虚拟的。这是 Entity Framework 创建支持延迟加载的代理对象所必需的。

请参阅此处了解更多信息。

于 2013-03-11T15:53:39.830 回答
7

你必须在你的调用代码上做一个 .include 来包含孩子。

就像是

Model.ContextEntityFramework().ScheduleEmployees.Include(x => x.Role).FirstOrDefault();
于 2013-03-11T15:52:09.553 回答
1

您的Role类根本不需要在集合上使用该ForeignKey属性。EmployeesEF 将自动知道根据ScheduleEmployee对象及其对ForeignKey属性的使用进行映射。

于 2013-03-11T15:47:11.023 回答
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; }
}
于 2015-11-19T13:48:04.173 回答