实体框架无法更新记录

时间:2018-05-19 10:13:37

标签: c# sql-server entity-framework entity-framework-6

我在Entity Framework ComputerLab中有一个SQL Server表,其中包含两个名为LabIdComputerId的外键和另一个名为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();
}

我在这里做错了什么?

0 个答案:

没有答案