2013-07-30 143 views
1

在EF中,交叉引用表通過創建多對多關係而被抽象化。例如。如何更新交叉引用表?

enter image description here

有一個SQL表dbo.TrialContactCrossReference這涉及到TrialContactId TrialID。現在,EF沒有生成實體TrialContactCrossReference,因爲它與這種多種關係有關。如何向表格添加新行?

我試圖

context.TrialContacts.???context.ClinicalTrials.???,只是不知道如何處理這個事情。如果我有一個新的聯繫人,我想與審判有關,我該如何處理它?

+1

這是一個很小的圖片,它周圍有巨大的白色空間。 –

回答

1

有一個技巧,在設置這個時不明顯。 TableA必須添加到TableB,而不僅僅是它自己。實際上,查看生成的實體時,每個實體都有另一個實體的列表<>。

class TableA 
{ 
    List<TableB> TableB; 
} 

class TableB 
{ 
    List<TableA> TableA; 
} 

例如,如果我想要一個TrialContact添加到ClinicalTrial然後我寫:

context.ClinicalTrials.TrialContacts.Add(trialContact);
context.SaveChanges()

然後外部參照表進行更新,以反映這種關係。

2

如果我有一個新的聯繫人,我想與審判有關,我應該如何去處理它?

假設你有一個現有的聯繫實例只是做:

trial.TrialContacts.Add(contact); 
context.SaveChanges(); 

EF會照顧中間表插入的爲您服務。請注意,添加Contact s和Trial s的工作原理與它們不相關的情況相同。

+0

這個回答很有幫助。最終,我不得不做更多的東西像'context.ClinicalTrials.TrialContacts.Add(trialContact);'。我必須包括兩個表。 –

2

trial.Contacts.Add(contact);

contact.Trials.Add(trial);

或(和我的指教)

,你可以創建一個交叉引用表的附加實體。這會將許多許多關係轉換爲2個一對多關係。超過90%的情況下,交叉表有額外的列(至少是IsActive,RecordDate等),即使它沒有,它可能在將來會如此,它需要你在代碼中做很多改變。