我的問題涉及一個任務表及其關係。EF6將具有兩個外鍵的子記錄添加到父表
業務模型是每個任務都有一個需要完成的任務列表,才能啓動。
我的C#EF6 winforms應用程序具有以下2個表(簡化的)
我與主鍵
[TaskID] [int] IDENTITY(1,1) NOT NULL
任務表和前任表僅具有兩列
[TaskID] [int] NOT NULL,
[PredecessorTaskId] [int] NOT NULL
其中主鍵由兩列組成。
TaskID
和PredecessorTaskId
都是任務表的外鍵。
在設計器edmx中,我看不到前驅表,而是有一行從Task表運行回自己。
通過運行自定義工具創建的代碼是
public partial class task
{
public task()
{
this.NeedsTasks = new HashSet<task>();
this.NeededByTasks = new HashSet<task>();
}
public int TaskID { get; set; }
public virtual ICollection<task> NeedsTasks { get; set; }
public virtual ICollection<task> NeededByTasks { get; set; }
// other fields
}
我無法找到的前驅表生成現在
我的代碼
如果我運行上面的任何代碼代碼和查詢記錄使用
select k.taskid, p.taskid, p.predecessortaskId
from task k left outer join predecessor p on k.taskid = p.taskid
where etc
我得到
taskid taskid predecessortaskid
568187 568187 568188
568188 NULL NULL
568189 568189 568187
568190 568190 568189
568191 568191 568190
這不是我想要的,因爲這是應有的空數據,表明第一個任務不需要任何其他任務開始的第一前身。
如果我取消呼叫轉移到循環中調用SaveChanges,我得到正確的結果
不過,我更希望有隻有一個調用的SaveChanges,所以有一個事務。
我也嘗試添加
prevtask.NeededByTasks.Add(task);
,來電後
task.NeedsTasks.Add(prevtask);
但它並沒有區別