У меня есть таблица 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();
}
Что я здесь не так делаю?