Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有2个外键的表实体框架_C#_Sql_Sql Server_Entity Framework - Fatal编程技术网

C# 具有2个外键的表实体框架

C# 具有2个外键的表实体框架,c#,sql,sql-server,entity-framework,C#,Sql,Sql Server,Entity Framework,我有一个由两个外键组成的表。这些只是表格中的元素。该表用于创建其他两个表之间的关联。例如:表是Users\u Products,只有两列是UserId和ProductID,它们都是外键。当我从数据库生成EF对象时,它没有创建Users\u Products对象,它只自动创建导航属性。现在,如何使用EF在我的Users\u Products表中插入数据?您可以获取一些用户对象并将产品添加到其导航属性中 using ( var ctx = new ...) { var user = new Us

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

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

using ( var ctx = new ...)
{
  var user = new User();
  var product = new Product();
  user.Products.Add(product);
  ctx.Users.AddObject(user);
  ctx.SaveChanges();
}
User user = context.Users.Where(u => u.Id == 1);
Product product = context.Products.Where(p => p.Id == 1);
user.Products.Add(product);
context.SaveChanges();

如果要创建关系(将记录插入
用户\产品
表),只需在
用户
产品
上使用导航属性即可:

user.Products.Add(product);

这意味着您必须在至少一侧具有navigation属性才能创建关系。如果您已从当前竞赛中加载实体,则可以使用@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();

有关显示如何处理EF中多对多关系的代码示例,请参阅中的处理多对多关系部分


首先是EF4.0/数据库;有关使用DbContext API的示例,请参见中的将课程作业添加到讲师编辑页面

这不就是将新项目添加到产品表中吗?user.Products.add(product)将在Users\u Products表中添加条目。顺便说一句,如果在此表中添加另一列(FKs除外),EF也将为此表创建EntityType。
// 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();