如何更新交叉引用表?

时间:2013-07-30 20:30:30

标签: c# entity-framework

在EF交叉引用表中,通过创建多对多关系来抽象出来。 E.G。

enter image description here

有一个SQL表dbo.TrialContactCrossReference,它将TrialContactId与TrialID相关联。现在,EF没有生成实体TrialContactCrossReference,因为它与这个MANY-MANY关系有关。如何在表中添加新行?

我试过

context.TrialContacts.???context.ClinicalTrials.???,只是不知道该如何处理。如果我有一个新的联系人,我想与试验相关,我该怎么办呢?

3 个答案:

答案 0 :(得分:2)

  

如果我有一个新的联系人,我想与一个试验相关,我该怎么办呢?

假设您有一个现有的Contact实例,请执行以下操作:

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

EF将为您处理中间表插页。请注意,添加ContactTrial的工作原理与它们不相关的情况相同。

答案 1 :(得分:2)

trial.Contacts.Add(接触);

OR

contact.Trials.Add(试验);

或(和我的建议)

您可以为交叉引用表创建其他实体。这会将许多人转换成2个一对多的关系。更多%90个案例的crosstables有额外的列(至少是IsActive,RecordDate等),即使它没有,它可能在未来也是如此,它需要你在代码中进行大量的更改。

答案 2 :(得分:1)

在设置时,有一个技巧对我来说并不明显。必须将TableA添加到TableB中,而不仅仅是添加到自身。实际上,查看生成的实体,每个实体都具有List<>。另一个实体

class TableA
{
   List<TableB> TableB;
}

class TableB
{
   List<TableA> TableA;
}

例如,如果我想将一个TrialContact添加到ClinicalTrial,那么我写道:

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

然后更新xRef表以反映关系。