Daniel Andrei Popescu Ответов: 1

Как я могу решить ошибку"'таблица' не содержит первичных или потенциальных ключей, которые соответствуют списку ссылочных столбцов во внешнем ключе"?


Всем привет,

У меня проблема с базой данных.Он работал до сегодняшнего дня, когда я попытался построить его, и он сказал, что мои отношения с БД не очень хороши"SQL71516: The referenced table '[dbo].[Courses]' не содержит первичных или потенциальных ключей, соответствующих списку столбцов ссылок во внешнем ключе. Если ссылочный столбец является вычисляемым столбцом, он должен быть сохранен", а также "Ошибка 159: EntityType 'DatabaseStudentsModel.Login' не имеет определенного ключа. Определите ключ для этого EntityType"во втором случае у меня уже есть определенные ключи...Это мои столы:
CREATE TABLE [dbo].[RegisterTeacher] (
    [SNTeacher]  INT            NOT NULL,
    [UserName]   NVARCHAR (30)  NOT NULL,
    [pwd]        INT            NOT NULL,
    [fullName]   NVARCHAR (MAX) NOT NULL,
    [courseID] INT NOT NULL,
    [education]  NVARCHAR (50)  NULL,
    PRIMARY KEY CLUSTERED ([SNTeacher]), 
    CONSTRAINT [FK_RegisterTeacher_ToTable] FOREIGN KEY ([courseID]) REFERENCES [Courses]([courseID])
);

CREATE TABLE [dbo].[Login] (
    [SNTeacher] INT           NULL,
    [UserName]  NVARCHAR (10) NOT NULL,
    [pwd]       INT           NOT NULL,
    PRIMARY KEY CLUSTERED ([pwd]),
    CONSTRAINT [FK_Login_ToTable] FOREIGN KEY ([SNTeacher]) REFERENCES [dbo].[RegisterTeacher] ([SNTeacher])
);

CREATE TABLE [dbo].[Courses] (
    [courseID]   INT            NOT NULL,
    [courseName] NVARCHAR (MAX) NOT NULL,
    [education]  NVARCHAR (50)  NOT NULL,
    [SNTeacher]  INT            NOT NULL,
    [ClassID]    NVARCHAR (18)  NULL,
    PRIMARY KEY CLUSTERED ([courseID] ASC),
    CONSTRAINT [FK_Courses_ToTable] FOREIGN KEY ([SNTeacher]) REFERENCES [dbo].[RegisterTeacher] ([SNTeacher])
);

CREATE TABLE [dbo].[ChildCourse] (
    [courseID] INT           NOT NULL,
    [UserName] NVARCHAR (10) NOT NULL,
    [sNr]      INT           NOT NULL,
    PRIMARY KEY CLUSTERED ([courseID] ASC), 
    CONSTRAINT [FK_ChildCourse_ToTable] FOREIGN KEY ([sNr]) REFERENCES [Courses]([SNTeacher])
);

Что я должен сделать, чтобы избавиться от ошибки, и что я сделал неправильно, когда речь зашла об установлении отношений между таблицами?Заранее благодарю вас!

Что я уже пробовал:

Я пытался изменить PK и FK для курсов,Login и RegisterTeacher,но база данных не позволит мне ничего сделать,даже если я изменю sth,таблица не изменится.

1 Ответов

Рейтинг:
7

Jochen Arndt

У вас есть двунаправленные ссылочные таблицы.

Я предлагаю убрать свой courseID колонка и ссылка с сайта RegisterTeacher таблица (по крайней мере, когда преподаватель может провести несколько курсов).

Если вам действительно нужно использовать двунаправленные ссылочные таблицы, вы должны использовать ALTER заявление:

CREATE TABLE [dbo].[Courses] (
    [courseID]   INT            NOT NULL,
    [courseName] NVARCHAR (MAX) NOT NULL,
    [education]  NVARCHAR (50)  NOT NULL,
    [SNTeacher]  INT            NOT NULL,
    [ClassID]    NVARCHAR (18)  NULL,
    PRIMARY KEY CLUSTERED ([courseID] ASC)
);

ALTER TABLE [dbo].[Courses] ADD
    CONSTRAINT [FK_Courses_ToTable] FOREIGN KEY ([SNTeacher]) REFERENCES [dbo].[RegisterTeacher]);
);


Daniel Andrei Popescu

Здравствуйте,спасибо за ваш ответ.Мне это удалось,но у меня есть еще одна проблема с моей базой данных.Я создал БД в Visual Studio и сначала использую БД в своем проекте,и я заметил, что ошибка:Ошибка 159: "EntityType 'DatabaseStudentsModel.Логин" не имеет определенного ключа" сохраняется.Я удалил таблицу из БД,но когда я хочу создать новую, она говорит, что таблица, подобная той, которую я хочу создать, уже существует.Как мне удается попасть в БД и удалить там таблицу или заставить ее работать ?С уважением,

Jochen Arndt

Удаление (удаление) таблицы не работает, когда на нее ссылаются. Вы должны удалить сначала ссылок, поскольку(Эс). Поскольку вы только начинаете, удаление всей базы данных и повторное создание таблиц может быть проще и гарантирует, что она работает.

Daniel Andrei Popescu

А если я сначала использую БД,будет ли это проблемой?

Jochen Arndt

Я не использовал это до сих пор, так что я действительно не могу помочь.

Но если он делает то, как он читает (создает коды моделей из существующей базы данных), вам придется сделать это снова после удаления старого созданного контента, потому что дизайн базы данных был изменен.

Daniel Andrei Popescu

Хорошо,спасибо за ваш ответ.Если вы сделаете свой комментарий ответом,я отмечу его как"правильный".С наилучшими пожеланиями!

Jochen Arndt

Я могу отредактировать свой ответ, но думаю, что в этом нет необходимости, потому что эти комментарии принадлежат ему.

И вы уже приняли мой ответ. Спасибо.

Я до сих пор точно не знаю, почему произошла вторая ошибка. Но когда создание новой БД решило все проблемы, это могло быть связано с первой ошибкой.

Daniel Andrei Popescu

В конце концов это сработало.Я переделал все,что зависело от Entity Framework, даже отношения между таблицами.Теперь мой Entity Framework работает!Спасибо за уделенное время! :)

Jochen Arndt

Приятно слышать, что вам это удалось, и спасибо за ваши отзывы.