由于乐观并发错误,无法使用附加/条目在数据库中添加/修改实体



存储更新、插入或删除语句,意外影响 行数 (0)。此后,实体可能已被修改或删除 实体已加载。看 http://go.microsoft.com/fwlink/?LinkId=472540 有关以下方面的信息 了解和处理乐观并发异常。

在以下函数(MVC 操作)中:

// POST: api/Day
public void Post(int bed, DateTime date, float operatingTime)
{
Day currentDay = new Day()
{
Date = date,
BedId = bed,
OperatingTime = operatingTime
};
db.Entry(currentDay).State = EntityState.Modified;
db.SaveChanges();
}

Day类如下所示:

using System;
using System.Collections.Generic;
public partial class Day
{
public int Id { get; set; }
public float OperatingTime { get; set; }
public System.DateTime Date { get; set; }
public int BedId { get; set; }
public virtual Bed Bed { get; set; }
}

在操作中,特定Day可能已经存在,也可能不存在。如果不存在或更新现有Day,我打算创建一个新。Day表将DateBedId作为复合主键。

我还尝试先"附加"实体。

如果不存在具有匹配(复合)键的代码,我是否错误地认为我的代码将创建一个新条目?

谢谢!

如果未找到新条目,您的逻辑将不会创建新条目。EntityState.Modified将创建一个UPDATE语句。如果要在找不到时插入,则需要先查询数据库。我不喜欢在名为Post的方法中进行插入或更新的想法,但如果您愿意,您可以尝试如下:

// POST: api/Day
public void Post(int bed, DateTime date, float operatingTime)
{
Day currentDay = new Day()
{
Date = date,
BedId = bed,
OperatingTime = operatingTime
};
var dayExists = db.Day.FirstOrDefault(d => d.Date == date && d.BedId == bed);
if (dayExists != null) 
{
// you have a record, so update it
db.Entry(currentDay).State = EntityState.Modified;
}
else 
{
// no record found, insert one
db.Entry(currentDay).State = EntityState.Added;
}
db.SaveChanges();
}

最新更新