存储更新、插入或删除语句,意外影响 行数 (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
表将Date
和BedId
作为复合主键。
我还尝试先"附加"实体。
如果不存在具有匹配(复合)键的代码,我是否错误地认为我的代码将创建一个新条目?
谢谢!
如果未找到新条目,您的逻辑将不会创建新条目。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();
}