我有一个问题,在多对多关系中填充联结表中的正确值。在下面的图片中,我简化了我想要做的事情。 “左边的表”在我想要使用的数据库中有值。右侧的表格即将收到新记录。它有一个到Junction表的导航属性,左侧的表也是如此。联结表具有导航属性到其后部的两个表,并且它们被设置为要求。Ef6,多对多,插入和主键
当我创建在右侧的表中的新记录,我也给它添加在接线表中记录。 TOL_ID是已知的,因为它保存在数据库中,但TOR_ID即将创建,因此未知。当我尝试在我的上下文中调用SaveChanges时,它会尝试在TOR_ID填充右边的记录之前先保存联结表记录。尽管如此,将导航属性标记为要求将使EF知道在创建联结表行之前TOR_ID必须存在。相反,它试图插入一个现有的TOL_ID和0,当试图在连接到相同TOL_ID的正确记录上插入许多表时,这会导致违规。
注:第一保存TOR_IDs,然后用结记录连接是不是一种选择,因为交界处表记录的创建是一个“Slowly changing dimension”式6流的一部分。
这是怎么真的看起来像代码:
// The newRating is the new object corresponding the Table on the right
var newRating = new ModuleRating()
{
// The moduleRating.RatedDriveUnit already exists in the db
RatedDriveUnit = moduleRating.RatedDriveUnit
};
newModule.Ratings.Add(newRating);
你能提供正在处理记录的代码吗? –
@ S.Dav我会在上面发表。 – Midas
您必须将JT_ID添加到TOR和TOL表中。 – Mehmet