EF обновить внешний ключ, который является частью первичного ключа. Свойство является частью ключевой информации объекта и не может быть изменено - PullRequest
0 голосов
/ 18 апреля 2019

В базе данных SQL Server у меня есть таблица с тремя столбцами.Я использую Entity Framework в проекте для операций с базой данных.Эта таблица не требует столбца ID, поскольку на нее не будут ссылаться другие таблицы.

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

Например, предприятие может приобрести округ, поэтому идентификатор предприятия - это один внешний ключ, а идентификатор округа - другой внешний ключ.Комбинация этих двух внешних ключей является первичным ключом, поскольку предприятие не может приобретать один и тот же округ несколько раз.Одна из функций в приложении позволяет пользователю выполнять передачу, в то время как я хочу обновить бизнес-идентификатор, который является частью первичного ключа.

При вызове context.SaveChanges код выдает ошибку

Свойство 'business_id' является частью ключевой информации объекта и не может быть изменено.

Мой код:

CREATE TABLE [dbo].[BusinessCounty]
(
    [BusinessId] [int] NOT NULL,
    [CountyId] [smallint] NOT NULL,
    [Active] [tinyint] NULL,

    CONSTRAINT [PK_10_3] 
        PRIMARY KEY NONCLUSTERED ([BusinessId] ASC, [CountyId] ASC)
)
GO

ALTER TABLE [dbo].[BusinessCounty] 
    ADD CONSTRAINT [FK_11_4] 
        FOREIGN KEY([BusinessId]) REFERENCES [dbo].[Business] ([ID])
GO

ALTER TABLE [dbo].[BusinessCounty]  
    ADD CONSTRAINT [FK_15_3] 
        FOREIGN KEY([CountyId]) REFERENCES [dbo].[County] ([ID])
GO

Пожалуйста, посоветуйте, как мне обновить этот ключ.

1 Ответ

1 голос
/ 18 апреля 2019

Эта таблица не требует столбца ID, так как другие таблицы на нее не будут ссылаться.

Это предположение неверно.Столбец ID не существует, поэтому другие таблицы могут ссылаться на него.Самая основная цель идентификатора состоит в том, чтобы действовать как ключ кластеризации, и даже если вы не определите явный идентификатор для своей таблицы, он будет сгенерирован изнутри.

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

Я думаю этот вопрос был бы полезен.

...