ASP.Net 如果数据不存在则添加数据,如果数据存在则更新数据
Posted
技术标签:
【中文标题】ASP.Net 如果数据不存在则添加数据,如果数据存在则更新数据【英文标题】:ASP.Net Add data if data does not exist, if data exist then update data 【发布时间】:2021-12-10 19:05:26 【问题描述】:当数据已经存在时,我正在尝试创建程序,它将更新数据,如果没有,那么它将添加数据,下面是我的代码.. 更新工作但添加不起作用。如果我删除更新代码,那么添加将起作用
var itemLocQuantity = objERPMicroDbEntities.ItemLocationDatas.FirstOrDefault(items => items.ItemId == item.ItemId && items.LocationId == item.LocationId);
if (itemLocQuantity.ItemId == item.ItemId && itemLocQuantity.LocationId == item.LocationId)
itemLocQuantity.Quantity += item.QuantityReceive;
以上是更新
if (itemLocQuantity == null)
itemLocQuantity = new ItemLocationData();
// create new in db
itemLocQuantity.ItemId = item.ItemId;
itemLocQuantity.Quantity = item.QuantityReceive;
itemLocQuantity.LocationId = item.LocationId;
objERPMicroDbEntities.ItemLocationDatas.Add(itemLocQuantity);
以上是尝试添加的代码,但我的程序在尝试添加新数据时返回错误
【问题讨论】:
你能解释一下错误是什么 【参考方案1】:如果你的整个函数是这样的:
var itemLocQuantity = objERPMicroDbEntities.ItemLocationDatas.FirstOrDefault(items => items.ItemId == item.ItemId && items.LocationId == item.LocationId);
if (itemLocQuantity.ItemId == item.ItemId && itemLocQuantity.LocationId == item.LocationId)
itemLocQuantity.Quantity += item.QuantityReceive;
if (itemLocQuantity == null)
itemLocQuantity = new ItemLocationData();
// create new in db
itemLocQuantity.ItemId = item.ItemId;
itemLocQuantity.Quantity = item.QuantityReceive;
itemLocQuantity.LocationId = item.LocationId;
objERPMicroDbEntities.ItemLocationDatas.Add(itemLocQuantity);
然后,当您进行插入时,问题将是您的更新代码期望返回一个对象,这将失败,因为它发生在 Null 检查之前。您可以反转条件并使用else
条件进行更新:
var itemLocQuantity = objERPMicroDbEntities.ItemLocationDatas.SingleOrDefault(items => items.ItemId == item.ItemId && items.LocationId == item.LocationId);
if (itemLocQuantity == null) // insert.
itemLocQuantity = new ItemLocationData();
// create new in db
itemLocQuantity.ItemId = item.ItemId;
itemLocQuantity.Quantity = item.QuantityReceive;
itemLocQuantity.LocationId = item.LocationId;
objERPMicroDbEntities.ItemLocationDatas.Add(itemLocQuantity);
else // update.
itemLocQuantity.Quantity += item.QuantityReceive;
这甚至可以浓缩为:
var itemLocQuantity = objERPMicroDbEntities.ItemLocationDatas.SingleOrDefault(items => items.ItemId == item.ItemId && items.LocationId == item.LocationId);
if (itemLocQuantity == null) // insert.
itemLocQuantity = new ItemLocationData();
// create new in db
itemLocQuantity.ItemId = item.ItemId;
itemLocQuantity.LocationId = item.LocationId;
objERPMicroDbEntities.ItemLocationDatas.Add(itemLocQuantity);
itemLocQuantity.Quantity += item.QuantityReceive;
如果我们没有找到一个项目,插入它,然后在它被添加之后,或者如果它已经存在,更新if
之外的可更新字段。
此外,如果您要查询并期待一个或零个项目,请使用 SingleOrDefault
而不是 FirstOrDefault
。 First*
方法暗示我期望零或多个,我只关心第一个匹配。他们应该始终使用OrderBy*
子句来确保结果是可重复的。
【讨论】:
非常感谢史蒂夫的解决方案和提示!有效!! .. 试图解决这个问题好几个小时:D以上是关于ASP.Net 如果数据不存在则添加数据,如果数据存在则更新数据的主要内容,如果未能解决你的问题,请参考以下文章
ASP。 NET MVC 5:如果用户是管理员,则返回所有用户的列表
有没有办法将元数据添加到 ASP.NET Core 中的所有 GET 端点?