存储更新,插入或删除语句会影响意外 行数(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
和names
作为复合主键。
我还尝试先“附加”实体。
我是否错误地认为如果没有匹配(复合)密钥的代码,我的代码会创建一个新条目?
谢谢!
答案 0 :(得分:1)
如果找不到,您的逻辑将不会创建新条目。 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();
}