实体框架 - 嵌套的entites为null

时间:2017-08-11 13:08:36

标签: c# asp.net asp.net-mvc entity-framework entity-framework-6

我有一对多关系,我使用this.设计 我使用Code-First方法。

即:

public class JobData
{
    [Key]
    public int JobDataId { get; set; }
    public int JobId { get; set; }
    ...
    public virtual ICollection<TaskInfo> TaskInfoes { get; set; }
}

TaskInfo的定义如下:

public class TaskInfo
{
    public int TaskInfoId { get; set; }
    public int ExecId { get; set; }

    public virtual FrameData FrameData { get; set; }
    public virtual Card Card { get; set; }
    public virtual Tags Tags { get; set; }
    public virtual DriverInfo DriverInfo { get; set; }
    public virtual JobData JobData { get; set; }
}

FrameData,Card,Tags,DriverInfo都是TaskInfo的一对一参与者:

public class DriverInfo
{       
    public int DriverId { get; set; }

    [ForeignKey("TaskInfo")]
    public int DriverInfoId { get; set; }
    public virtual TaskInfo TaskInfo { get; set; }
}

使用这种方法可以很好地创建表,我得到了JobData表和TaskInfoes表,它保存了对JobData的引用,并且我还在TaskInfo中为每个嵌套类创建了表。甚至可以正确保存数据,因此,每个表都会被填充。但是,当我试图获取jobData实例时,它有完整的TaskInfoes列表,但所有嵌套类都是null。 我在这做错了什么? 我一直在尝试不同的解决方案,比如在嵌套类中指定[Key,ForeignKey(""),尝试为TaskInfoes创建单独的上下文并使用类似这样的内容:

modelBuilder.Entity<TaskInfo>()               
            .HasRequired<JobData>(s => s.JobData) // TaskInfo entity requires JobData 
            .WithMany(s => s.TaskInfoes)        // JobData entity includes many TaskInfoes entities
            .WillCascadeOnDelete(true);

modelBuilder.Entity<TaskInfo>()
            .HasRequired<FrameData>(s => s.FrameData);// TaskInfo entity requires FrameData 

以及:

var data = context.TaskInfoes
        .Include(s => s.Framedata)
        .Include(s => s.Card)
        .Include(s => s.DriverInfo)
        .Include(s => s.Tags)
        .ToList();

无论什么都可以,嵌套类无效。我完全错过了一些重要的事情,请你告诉我什么? :)

P.S。我获取jobData实例的方式是

 return context.Jobs.Find(id);

return context.Jobs.SingleOrDefault(job => job.JobId == id);

0 个答案:

没有答案