Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 如何向实体框架中的现有实体添加新关联(多对多)?_Entity Framework_Many To Many - Fatal编程技术网

Entity framework 如何向实体框架中的现有实体添加新关联(多对多)?

Entity framework 如何向实体框架中的现有实体添加新关联(多对多)?,entity-framework,many-to-many,Entity Framework,Many To Many,我的数据库中有3个表:“Projects”、“Users”和“UsersInProjects”。在“UsersInProjects”表中,只有两个字段,没有主键。 MS实体框架由数据库生成类,即项目中有用户集合,用户中有项目集合。太棒了! 但我无法将项目添加到用户和用户添加到项目: user.Projects.Add(project); Entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave); 或 或 比如说 每次尝试时,我都会遇

我的数据库中有3个表:“Projects”、“Users”和“UsersInProjects”。在“UsersInProjects”表中,只有两个字段,没有主键。 MS实体框架由数据库生成类,即项目中有用户集合,用户中有项目集合。太棒了! 但我无法将项目添加到用户和用户添加到项目:

user.Projects.Add(project);
Entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);

比如说

每次尝试时,我都会遇到异常:“无法更新EntitySet'UsersInProjects',因为它有一个DefiningQuery,并且元素中不存在支持当前操作的元素。”

我是否可以向“UsersInProjects”表中添加一个不带存储过程且不带主键的关联

我明白了!下一个查询do table和EF在数据库中正常工作:

使用[BugTracker] 去

将ANSI_空值设置为ON 去

在上设置带引号的\u标识符 去

创建表[dbo]。[UserProject]( [Users_Id][int]不为空, [Projects_Id][int]不为空, 约束[PK_UserProject]主键非聚集 ( [用户Id]ASC, [项目Id]ASC )在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON) )在[小学]

使用检查添加约束[FK\U UserProject\U Project]外键([Projects\U Id])更改表[dbo].[UserProject] 引用[dbo].[Project]([Id]) 去

ALTER TABLE[dbo].[UserProject]检查约束[FK_UserProject_Project] 去

使用检查添加约束[FK\U UserProject\U User]外键([Users\U Id])更改表[dbo].[UserProject] 引用[dbo].[User]([Id]) 去

ALTER TABLE[dbo].[UserProject]检查约束[FK\U UserProject\U User]
GO

实体框架要求每个表必须具有主键才能更新。在您的情况下,必须修改连接表并将两个FK定义为PK。除了存储过程之外,没有其他方法

project.Users.Add(user);
Entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
user.Projects.Add(project);
project.Users.Add(user);
Entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);