2011-03-14 58 views
1

我的數據庫中有3個表格:「項目」,「用戶」和「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 [錯誤追蹤] 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] )ON [PRIMARY]

GO

ALTER TABLE [DBO]。[UserProject] WITH CHECK ADD CONSTRAINT [FK_UserProject_Project]外鍵([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]外鍵([Users_Id]) 參考文獻[DBO]。[用戶]([ID]) GO

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

回答

2

實體框架要求每個表必須有主鍵可更新。在你的情況下,你必須修改接點表並將兩個FK定義爲PK。除了存儲過程以外沒有其他方法。