表有2个外键实体框架

时间:2011-07-25 04:40:22

标签: c# sql sql-server entity-framework

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

在我的Users_Products表中插入数据

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

有关如何在EF中使用多对多关系的代码示例,请参阅使用多对多关系部分 The Entity Framework 4.0 and ASP.NET – Getting Started Part 5

那就是EF 4.0 /数据库优先;有关使用DbContext API的示例,请参阅Updating Related Data with the Entity Framework in an ASP.NET MVC Application (6 of 10)中的向教师编辑页面添加课程作业

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果要创建关系(将记录插入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();