Мы находимся в процессе обновления одного из наших проектов данных с .NET 4.7.2 до .NET 8.0. У меня возникли проблемы при попытке настроить связь «один-ко-многим» между объектами, в которых присутствует таблица соединения/соединения.
Я хотел бы пропустить промежуточную таблицу и получить прямую ссылку к объекту на противоположном конце (та же концепция, что и переход по пропуску для отношений «многие ко многим»).
Структура таблицы и фиктивные данные ниже.
Код: Выделить всё
CREATE DATABASE Scratch;
USE Scratch;
-- Table creation
CREATE TABLE Scratch.dbo.ContentLanguage
(
Id int IDENTITY(0,1) NOT NULL,
Name nvarchar(255) NOT NULL,
CONSTRAINT PK_ContentLanguage PRIMARY KEY (Id)
);
CREATE TABLE Scratch.dbo.Genre
(
Id int IDENTITY(0,1) NOT NULL,
Name nvarchar(255) NOT NULL,
CONSTRAINT PK_Genre PRIMARY KEY (Id)
);
CREATE TABLE Scratch.dbo.ContentLanguage_GenreMap
(
ContentLanguageId int IDENTITY(0,1) NOT NULL,
GenreId int NOT NULL,
CONSTRAINT PK_ContentLanguage_GenreMap PRIMARY KEY (ContentLanguageId),
CONSTRAINT FK_ContentLanguage_GenreMap_ContentLanguage FOREIGN KEY (ContentLanguageId) REFERENCES Scratch.dbo.ContentLanguage(Id),
CONSTRAINT FK_ContentLanguage_GenreMap_Genre FOREIGN KEY (GenreId) REFERENCES Scratch.dbo.Genre(Id)
);
-- Seed data
SET IDENTITY_INSERT Scratch.dbo.ContentLanguage ON;
INSERT INTO Scratch.dbo.ContentLanguage (Id, Name) VALUES (0, N'English');
INSERT INTO Scratch.dbo.ContentLanguage (Id, Name) VALUES (1, N'French');
INSERT INTO Scratch.dbo.ContentLanguage (Id, Name) VALUES (2, N'Chinese');
INSERT INTO Scratch.dbo.ContentLanguage (Id, Name) VALUES (3, N'Dutch; Flemish');
INSERT INTO Scratch.dbo.ContentLanguage (Id, Name) VALUES (4, N'German');
INSERT INTO Scratch.dbo.ContentLanguage (Id, Name) VALUES (5, N'Italian');
SET IDENTITY_INSERT Scratch.dbo.ContentLanguage OFF;
SET IDENTITY_INSERT Scratch.dbo.Genre ON;
INSERT INTO Scratch.dbo.Genre (Id, Name) VALUES (0, N'English');
INSERT INTO Scratch.dbo.Genre (Id, Name) VALUES (1, N'French');
INSERT INTO Scratch.dbo.Genre (Id, Name) VALUES (2, N'Chinese');
INSERT INTO Scratch.dbo.Genre (Id, Name) VALUES (3, N'Dutch; Flemish');
INSERT INTO Scratch.dbo.Genre (Id, Name) VALUES (4, N'German');
INSERT INTO Scratch.dbo.Genre (Id, Name) VALUES (5, N'Italian');
SET IDENTITY_INSERT Scratch.dbo.Genre OFF;
SET IDENTITY_INSERT Scratch.dbo.ContentLanguage_GenreMap ON;
INSERT INTO Scratch.dbo.ContentLanguage_GenreMap (ContentLanguageId, GenreId) VALUES (0, 0);
INSERT INTO Scratch.dbo.ContentLanguage_GenreMap (ContentLanguageId, GenreId) VALUES (1, 1);
INSERT INTO Scratch.dbo.ContentLanguage_GenreMap (ContentLanguageId, GenreId) VALUES (2, 2);
INSERT INTO Scratch.dbo.ContentLanguage_GenreMap (ContentLanguageId, GenreId) VALUES (3, 3);
INSERT INTO Scratch.dbo.ContentLanguage_GenreMap (ContentLanguageId, GenreId) VALUES (4, 4);
INSERT INTO Scratch.dbo.ContentLanguage_GenreMap (ContentLanguageId, GenreId) VALUES (5, 5);
SET IDENTITY_INSERT Scratch.dbo.ContentLanguage_GenreMap OFF;
В идеале сущности в отношениях должны иметь прямую ссылку на сущность на противоположном конце отношения без ссылки на таблицу соединения.
Есть идеи, как это решить? Если у вас есть еще вопросы, дайте мне знать.
Заранее спасибо.
Я работаю с сильно связанной системой, а не в можно полностью удалить объединяющую таблицу, поскольку она связана с некоторыми процедурами SQL, автоматическими отчетами и т. д.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -doesnt-re