Я создал составной первичный ключ, используя свободный API для EF Core, который создал эту таблицу:
CREATE TABLE [dbo].[Review]
(
[UserId] NVARCHAR(450) NOT NULL,
[ArticleId] INT NOT NULL,
[ReviewRating] FLOAT(53) NOT NULL,
[ReviewContent] NVARCHAR(MAX) NOT NULL,
[ReviewLastUpdate] DATETIME2(7) NULL,
[ReviewCreated] DATETIME2(7) DEFAULT (getdate()) NOT NULL,
[ReviewVisible] BIT DEFAULT ((1)) NOT NULL,
CONSTRAINT [PK_Review]
PRIMARY KEY CLUSTERED ([UserId] ASC, [ArticleId] ASC),
CONSTRAINT [FK_Review_AspNetUsers_UserId]
FOREIGN KEY ([UserId])
REFERENCES [dbo].[AspNetUsers] ([Id])
ON DELETE CASCADE,
CONSTRAINT [FK_Review_Article_ArticleId]
FOREIGN KEY ([ArticleId])
REFERENCES [dbo].[Article] ([ArticleId])
ON DELETE CASCADE
);
UserId
взято из таблицы AspNetUsers, в то время как Статья является моей собственной настройкой таблицы, которая автоматически генерирует ее идентификатор.
У созданной в скаффолде страницы создания есть выпадающий список, который я заменил скрытым текстовым полем, в котором хранится значение UserId пользователя, вошедшего в систему в данный момент, и оно отправляется при отправке формы.
Но при отправке выдается исключение SQL
SqlException: преобразование завершилось неудачно при преобразовании значения nvarchar '57ed59a3-e2c9-4805-a57d-3d1ea7afed3f' в тип данных int.
57ed59a3-e2c9-4805-a57d-3d1ea7afed3f
- это UserId
. Даже когда я пытаюсь ввести значение напрямую, мне выдается та же ошибка.
Я даже пытался изменить его на некластеризованный, поскольку он может конфликтовать из-за 3-й причины, указанной здесь: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-clustered-indexes?view=sql-server-2017#Restrictions
Но это не имело значения. Может кто-нибудь указать мне, что я могу сделать, чтобы решить эту ошибку?