В моей базе данных есть 3 таблицы: "Проекты", "Пользователи" и "ПользователиПроекты". В таблице «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);
как в в этом примере кода проекта .
При каждой попытке у меня возникает исключение: «Невозможно обновить 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] НЕ NULL,
CONSTRAINT [PK_UserProject] ПЕРВИЧНЫЙ КЛЮЧ НЕКЛЮЧЕН
(
[Users_Id] ASC,
[Projects_Id] ASC
) С (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [ПЕРВИЧНЫЙ]
) НА [ПЕРВИЧНО]
GO
ALTER TABLE [dbo]. [UserProject] с проверкой ADD CONSTRAINT [FK_UserProject_Project] FOREIGN KEY ([Projects_Id])
ССЫЛКИ [dbo]. [Project] ([Id])
GO
ALTER TABLE [dbo]. [UserProject] CHECK CONSTRAINT [FK_UserProject_Project]
GO
ALTER TABLE [dbo]. [UserProject] с проверкой ADD CONSTRAINT [FK_UserProject_User] FOREIGN KEY ([Users_Id])
ССЫЛКИ [dbo]. [Пользователь] ([Id])
GO
ALTER TABLE [dbo]. [UserProject] CHECK CONSTRAINT [FK_UserProject_User]
GO