我有一對多的關係,我使用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,卡片,標籤,DriverInfo都是一個一對一的entites與TASKINFO:
public class DriverInfo
{
public int DriverId { get; set; }
[ForeignKey("TaskInfo")]
public int DriverInfoId { get; set; }
public virtual TaskInfo TaskInfo { get; set; }
}
使用這種方法創建表格就好了,我得到了JobData表和TaskInfoes t能夠保持對JobData的引用,並且我還爲TaskInfo中的每個嵌套類都提供了表。數據甚至保存正確,因此每個表都被填充。但是,當我試圖獲取jobData實例時,它具有TaskInfoes的完整列表,但是所有嵌套類都不幸爲空。 我在這裏做錯了什麼? 我一直在嘗試不同的解決方案,如在嵌套類指定[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);
看起來像不正確的「一對一」配置。您是否正在映射到退出數據庫,或者是從上述模型的Code First遷移生成的?我們可以看到例如'DriverInfo' **表**嗎? –
嗯,我在想這個,確實,嵌套的類表沒有任何鍵......爲什麼?這裏是[表格](https://yadi.sk/i/RmZKncZm3Lup3s) P.S.我從[這裏]使用「使用DataAnnotations配置一對一或一個關係:」(http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in- code-first.aspx) – Amarula
代碼中的「TaskInfo.JobData」在哪裏? – grek40