表有2个外键entity framework

我有一个由2个外键组成的表。 这些只是表格的元素。 该表旨在创建其他2个表之间的关联。 例如:表是Users_Products,只有2列是UserId和ProductID,都是外键。 当我从数据库生成EF对象时,它没有创建Users_Products对象,它只自动创建导航属性。 现在如何使用EF在我的Users_Products表中插入数据?

您可以获取一些用户对象并将产品添加到其导航属性中。

User user = context.Users.Where(u => u.Id == 1); Product product = context.Products.Where(p => p.Id == 1); user.Products.Add(product); context.SaveChanges(); 

有关如何在EF中使用多对多关系的代码示例,请参阅“entity framework4.0和ASP.NET – 入门”第5部分中的“使用 多对多关系”部分。

那是EF 4.0 / Database First; 有关使用DbContext API的示例,请参阅在ASP.NET MVC应用程序中使用entity framework更新相关数据中 向教师编辑页面添加课程分配 (第6步,共10步) 。

 using ( var ctx = new ...) { var user = new User(); var product = new Product(); user.Products.Add(product); ctx.Users.AddObject(user); ctx.SaveChanges(); } 

如果要创建关系(将记录插入User_Products表),您只需要在UserProduct上使用导航属性:

 user.Products.Add(product); 

要么

 product.Users.Add(user); 

这意味着您必须至少在一侧具有导航属性才能创建关系。 如果您已从当前比赛中加载实体,则可以使用@Pavel描述的方法。

如果您没有加载实体,或者您不想仅为了建立关系而对数据库进行两次查询,则可以使用此解决方法:

 // Make dummy objects for records existing in your database var user = new User() { Id = 1 }; var product = new Product() { Id = 1 }; // Ensure that your context knows instances and does not track them as new or modified context.Users.Attach(user); context.Products.Attach(product); // Again make relation and save changes user.Products.Add(product); ctx.SaveChanges();