我试着编写一个简单的create-method,就像我多次构建一样,但这一次,我一次又一次地得到这个错误:
Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.
我还尝试了异常给出的链接中的推荐过程:
catch (DbUpdateConcurrencyException dbex)
{
dbex.Entries.Single().Reload();
}
但随后发生了以下错误:
Refresh cannot be used for entities in the Added state
可以理解的是,我调用了Add-Method,所以应该没有什么需要刷新的,对吧?
我在网上找到的大多数案例都是针对Update-method的,所以不是我想要的。
我也尝试过这种方法,但异常不是由错误触发的。catch (DbUpdatableDataRecord ex) { return Json(ex.DataRecordInfo,JsonRequestBehavior.AllowGet);}
型号:
public class ForecastItem
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required( ErrorMessage = "Bitte ein Datum auswählen." )]
[Display( Name = "Datum" )]
public DateTime Date { get; set; }
[Required( ErrorMessage = "Bitte ein Projekt auswählen." )]
[Display( Name = "Projekt-ID" )]
public int ProjectId { get; set; }
[Required( ErrorMessage = "Bitte einen Preis eingeben." )]
[Display( Name = "Preis" )]
public decimal Price { get; set; }
[Required( ErrorMessage = "Bitte einen Tickettyp hinterlegen." )]
[Display( Name = "Tickettyp" )]
public string TicketType { get; set; }
[Required( ErrorMessage = "Bitte einen Abrechnungstyp auswählen." )]
[Display( Name = "Abrechnungstyp" )]
public string AccountingType { get; set; }
[Required(ErrorMessage = "Bitte ein Ziel-Projektvolumen angeben.")]
[Display(Name = "Zielvolumen")]
public int TargetVolume { get; set; }
[Display(Name = "Projekt")]
public virtual Project Project { get; set; }
}
方法:
public JsonResult addForecastItem(string newDate, int newProjectId, int newForecastVolume, string newTicketType, string newCalcType, decimal newPrice)
{
ForecastItem fi = new ForecastItem
{
AccountingType = newCalcType,
Date = DateTime.Now,
Price = newPrice,
ProjectId = newProjectId,
TargetVolume = newForecastVolume,
TicketType = newTicketType
};
if ( ModelState.IsValid)
{
try
{
db.ForecastItems.Add(fi);
db.SaveChanges();
}
catch (Exception e)
{
return Json(e.Message, JsonRequestBehavior.AllowGet);
}
}
return Json(fi, JsonRequestBehavior.AllowGet);
}
我说错了吗?模型是有效的,数据库是从软件的其他部分插入的。
发布于 2021-01-15 01:03:36
哦,天哪,
错误是: ID没有自动递增。这个表是通过SQL (to prototype,不是prod)创建的,ID是一个普通的INT。
Key-Attribute是在创建类时添加的,但数据库不是新建的。
解决方案:
上构建数据库
alter table ForecastItems drop column ID -- drop Column ID alter table ForecastItems add ID INT IDENTITY(1,1) --使用` Autoincrement 创建列ID
https://stackoverflow.com/questions/65719653
复制相似问题