我的数据库中有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
答案 0 :(得分:2)
实体框架要求每个表必须具有可更新的主键。在您的情况下,您必须修改联结表并将两个FK定义为PK。除存储过程外没有其他办法。