Как я могу добавить новую ассоциацию (многие ко многим) к существующим объектам в Entity Framework? - PullRequest
1 голос
/ 14 марта 2011

В моей базе данных есть 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

1 Ответ

2 голосов
/ 14 марта 2011

Платформа сущностей требует, чтобы каждая таблица имела первичный ключ для возможности обновления.В вашем случае вы должны изменить таблицу соединений и определить оба FK как PK.Нет другого пути, кроме хранимых процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...