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

时间:2011-03-14 18:04:53

标签: entity-framework many-to-many

我的数据库中有3个表:“Projects”,“Users”和“UsersInProjects”。在“UsersInProjects”表中只有两个字段,没有主键。  MS Entity Framework按数据库生成类,即项目中的用户集合和用户的项目集合。这很棒! 但我不能将项目添加到用户和用户项目:

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

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

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

就像在this sample on codeproject中一样。

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

我可以在没有存储过程的情况下添加关联,并将“添加”主键添加到“UsersInProjects”表中吗?

我明白了!下一个查询表和EF与数据库正确工作:

USE [BugTracker] GO

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

CREATE TABLE [dbo]。[UserProject](     [Users_Id] [int] NOT NULL,     [Projects_Id] [int] NOT NULL,  CONSTRAINT [PK_UserProject] PRIMARY KEY NONCLUSTERED (     [Users_Id] ASC,     [Projects_Id] ASC )WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)ON [PRIMARY] )[主要]

GO

ALTER TABLE [dbo]。[UserProject] WITH CHECK ADD CONSTRAINT [FK_UserProject_Project] FOREIGN KEY([Projects_Id]) 参考文献[dbo]。[项目]([Id]) GO

ALTER TABLE [dbo]。[UserProject] CHECK CONSTRAINT [FK_UserProject_Project] GO

ALTER TABLE [dbo]。[UserProject] WITH CHECK ADD CONSTRAINT [FK_UserProject_User] FOREIGN KEY([Users_Id]) 参考[dbo]。[用户]([Id]) GO

ALTER TABLE [dbo]。[UserProject] CHECK CONSTRAINT [FK_UserProject_User] GO

1 个答案:

答案 0 :(得分:2)

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