我在Entity Framework ComputerLab中有一个SQL Server表,其中包含两个名为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();
}
我在这里做错了什么?