我有一对多关系,我使用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);