实体框架不写入Junction Table

时间:2014-02-06 23:10:29

标签: c# asp.net .net frameworks entity

这是我创建的第一个真正的应用程序,所以请成为gentile。

数据库包含一个名为APN的表,主键为APNID,另一个表为BGP,主键为BGPID。名为APNBGP的连接表,其中两列充当组合密钥,由两个外键组成:APNID,BGPID。 model.edmx文件确实显示了APN和BGP表之间的多对多关联。

APN vtcApn = new APN();
BGP vtcBGP = new BGP();

vtcVlan.VlanID = Convert.ToInt32(ddVlans.SelectedValue);
vtcApn.APN_Name = apnName.Text;
vtcApn.PDP = PDP.Text;

vtcBGP.RemotePeer = vtcPriPeer.Text;
vtcBGP.RemoteAS = vtcPriAs.Text;

dbContext.APNs.AddObject(vtcApn);
dbContext.BGPs.AddObject(vtcBGP);
dbContext.SaveChanges();

当我运行应用程序时,它会将所有APN和BGP属性保存到数据库,但不会更新APNBGP联结表。据我所知,EF会负责更新所有受影响的表格。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

是。告诉我。确切地说,您告诉EF您的APN和BGP是否相关?你没有。

您通常会在每个上都有某种收集。例如,您的APN实体上可能有BGPs集合。然后你会做这样的事情:

vtcApn.BGPs.Add(vtcBGP);

然后您不必将其添加到dbContext.BGPs。

答案 1 :(得分:0)

使用Add()方法代替AddObject(),如下所述:

dbContext.APNs.Add(vtcApn);
dbContext.BGPs.Add(vtcBGP);
dbContext.SaveChanges();