Entity Framework не может обновить запись - PullRequest
0 голосов
/ 19 мая 2018

У меня есть таблица SQL Server в Entity Framework ComputerLab с двумя внешними ключами с именем LabId, ComputerId и другим ключом с именем Entrance

CREATE TABLE [dbo].[ComputerLabs] 
(
    [LabId]      INT      NOT NULL,
    [ComputerId] INT      NOT NULL,
    [Entrance]   DATETIME NOT NULL,
    [Exit]       DATETIME NULL,

    CONSTRAINT [PK_ComputerLabs] 
        PRIMARY KEY CLUSTERED ([ComputerId] ASC, [LabId] ASC, [Entrance] ASC),
    CONSTRAINT [FK_ComputerLabs_Lab] 
        FOREIGN KEY ([LabId]) REFERENCES [dbo].[Lab] ([LabId]),
    CONSTRAINT [FK_ComputerLabs_Computer] 
        FOREIGN KEY ([ComputerId]) REFERENCES [dbo].[Computer] ([ComputerId])
);

Отображение: 1

и функция, которая обновляет запись (которая соответствует данному computerId, labId и не имеет значения выхода):

public void RemoveComputerFromLab(int compId, int labId)
{
    var cList = db.ComputerLabs.Where(e => !e.Exit.HasValue && e.LabId.Equals(labId)).ToList();

    if (cList.Count > 0)
    {
        ComputerLab cL = cList.First();
        cL.Exit = DateTime.Now;
        db.Entry(cL).State = EntityState.Modified;
        db.SaveChanges();

        /* also tried:
        ComputerLab cL = cList.First();
        db.ComputerLabs.Attach(cL);
        cL.Exit = DateTime.Now;
        db.SaveChanges();
        */
    }
}

SaveChanges() выдает исключение:

Оператор хранения, вставки или удаления затронул неожиданное количество строк (0).Объекты могут быть изменены или удалены с момента загрузки объектов.

, но нет другого процесса, который мог бы изменить этот объект.

Такое же исключение происходит при попытке удалить запись:

private void DeleteComputerLab(int compId, int labId, DateTime entrance)
{
    var entity = db.ComputerLabs.Find(labId, compId, entrance);

    lab.ComputerLabs.Remove(entity);
    //db.Entry(entity).State = EntityState.Deleted; -not working either
    db.SaveChanges();
}

Что я здесь не так делаю?

...