.Net Core EF не позволяет мне вводить один и тот же внешний ключ - PullRequest
0 голосов
/ 10 октября 2019

У меня есть модель с внешним ключом. В некоторых случаях .NET Core EF не позволяет мне дважды вводить один и тот же внешний ключ в таблицу.

public class DolsMcaClientModel
{
    [Key]
    public int DolsMcaClientID { get; set; }

    public int DolsMcaItemID { get; set; }
    public virtual DolsMcaItemModel DolsMcaItemModel  { get; set; }

    public int ClientID { get; set; }

    [Required]
    public int FileID { get; set; }
    public virtual FileModel FileModel { get; set; }
}

В этой таблице DolsMcaClientID - это мой столбец идентификаторов, а DolsMcaItemID - моя иностранная колонка. DolsMcaItemModel - это мое свойство навигации.

Я не могу ввести один и тот же DolsMcaItemID для другого клиента. DolsMcaItemID действует как первичный ключ в таблице. Но это не так. enter image description here

ERROR: System.Data.SqlClient.SqlException: Cannot insert duplicate key row in object 'dbo.DolsMcaClientModels' with unique index 'IX_DolsMcaClientModels_DolsMcaItemID'. The duplicate key value is (1).

Если я удаляю элемент DolsMcaItemID 1 из таблицы, то я могу добавить новую запись в таблицу с DolsMcaItemId 1, но только один раз с любым clientID... я не могу ввести DolsMcaItem 1 для любого другого clientID

Мой запрос на создание таблицы SQL:

CREATE TABLE [dbo].[DolsMcaClientModels](
[DolsMcaClientID] [int] IDENTITY(1,1) NOT NULL,
[DolsMcaItemID] [int] NOT NULL,
[ClientID] [int] NOT NULL,
[FileID] [int] NOT NULL,
 CONSTRAINT [PK_DolsMcaClientModels] PRIMARY KEY CLUSTERED 
(
    [DolsMcaClientID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[DolsMcaClientModels]  WITH CHECK ADD  CONSTRAINT [FK_DolsMcaClientModels_DolsMcaItemModels_DolsMcaItemID] FOREIGN KEY([DolsMcaItemID])
REFERENCES [dbo].[DolsMcaItemModels] ([DolsMcaItemID])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[DolsMcaClientModels] CHECK CONSTRAINT [FK_DolsMcaClientModels_DolsMcaItemModels_DolsMcaItemID]
GO

ALTER TABLE [dbo].[DolsMcaClientModels]  WITH CHECK ADD  CONSTRAINT [FK_DolsMcaClientModels_FileModels_FileID] FOREIGN KEY([FileID])
REFERENCES [dbo].[FileModels] ([FileID])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[DolsMcaClientModels] CHECK CONSTRAINT [FK_DolsMcaClientModels_FileModels_FileID]
GO

1 Ответ

1 голос
/ 10 октября 2019

UNIQUE index [IX_DolsMcaClientModels_DolsMcaItemID] в этом столбце не позволяет вам зафиксировать другую запись с таким же [DolsMcaItemID] .

Исправление заключается в удалении уникального индекса:

ALTER TABLE [dbo].[DolsMcaClientModels] DROP INDEX [IX_DolsMcaClientModels_DolsMcaItemID];

CREATE INDEX [IX_DolsMcaClientModels_DolsMcaItemID] ON [dbo].[DolsMcaClientModels] ([DolsMcaItemID])

Не забудьте очистить свой контекст БД, чтобы удалить ограничение из кода.

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