表带有2个外键的实体框架
本文关键字:实体 框架 2个 | 更新日期: 2023-09-27 18:03:38
我有一个由2个外键组成的表。这些只是表中的元素。这个表是用来创建其他两个表之间的关联的。例如:表是Users_Products,只有2列是UserId和ProductID,都是外键。当我从数据库生成EF对象时,它没有创建Users_Products对象,它只自动创建导航属性。现在如何使用EF在Users_Products表中插入数据呢?
你可以获取一些用户对象并将product添加到它的导航属性中。
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中使用多对多关系的代码示例,请参阅使用多对多关系一节实体框架4.0和ASP。. NET入门第5部分
即EF 4.0/Database First;有关使用DbContext API的示例,请参见在ASP中使用实体框架更新相关数据中的将课程作业添加到教师编辑页面。. NET MVC应用程序(6 of 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
表),你只需要在User
或Product
上使用导航属性:
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();