Entity Framework обновляет строку, исключая столбец IDENTITY - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь обновить строку, игнорируя существующий в базе данных столбец идентификаторов.

При обновлении я получаю следующую ошибку:

_context.Entry(existingEvent).Property(x => x.ReferenceNumber).IsModified = false;
_context.Events.Update(existingEvent);

Исключение: Microsoft.EntityFrameworkCore.DbUpdateException: при обновлении записей произошла ошибка. Смотрите внутреннее исключение для деталей. ---> System.Data.SqlClient.SqlException: невозможно обновить столбец идентификаторов «ReferenceNumber».

Я также попытался выполнить следующее, но это также приводит к исключению:

_context.Events.Update(existingEvent);
_context.Entry(existingEvent.ReferenceNumber).State = EntityState.Unchanged;

System.InvalidOperationException: тип сущности int не найден. Убедитесь, что тип сущности был добавлен в модель.

Таблица:

CREATE TABLE [DW].[Reporting]
(
    [ID] UNIQUEIDENTIFIER NOT NULL,
    [ReferenceNumber] INT NOT NULL IDENTITY(1,1) UNIQUE,
    [Date] DATETIME NOT NULL,
    [Address] VARCHAR(256) NOT NULL,
    [EventName] VARCHAR(256),
    [Subject] VARCHAR(512),
    [PhotographerID] UNIQUEIDENTIFIER,
    [CameraNumber] VARCHAR(24),
    [PictureAmount] INT,
    [NegativeID] UNIQUEIDENTIFIER,
    [CategoryID] UNIQUEIDENTIFIER,
    [People] VARCHAR(256),

    CONSTRAINT [PK_Reporting] PRIMARY KEY (ID),
    CONSTRAINT [UV_Reporting_Code] UNIQUE ([ReferenceNumber]),
    CONSTRAINT [FK_Reporting_Photographers_PhotographerID] 
        FOREIGN KEY ([PhotographerID]) REFERENCES [DW].[Photographers]([ID]),
    CONSTRAINT [FK_Reporting_Negatives_NegativeID] 
        FOREIGN KEY ([NegativeID]) REFERENCES [DW].[Negatives]([ID]),
    CONSTRAINT [FK_Reporting_Categories_CategoryID] 
        FOREIGN KEY ([CategoryID]) REFERENCES [DW].[Categories]([ID])
)

1 Ответ

2 голосов
/ 10 марта 2020

Вы только что перевернули код. Update() помечает все свойства как измененные. Если вы хотите исключить один, сделайте это после.

_context.Events.Update(existingEvent);
_context.Entry(existingEvent).Property(x => x.ReferenceNumber).IsModified = false;
...