我正在进行POST调用以将花添加到数据库中,但是如果if语句为true,我想更新另一个表中的记录。如果该语句不正确,那么它将毫无问题地添加花,但是当我尝试使用新ID更新PinkRoseId
时,它将创建一条新记录,而不是更新旧记录。
还有另一种更新数据库的方法吗?
public void AddFlower(Flower flowerToAdd, int someId)
{
_flowerContext = _contextUtility.GetFlowerContext(flowerToAdd.FlowerName);
var pinkRoseId = _flowerService.GetFlowerIdByName(flowerToAdd.FlowerName, "PinkRose", "Rose");
if (flowerToAdd.SomeFlowerId.HasValue)
{
var flowerToUpdate = _updateService.UpdateFlowerBySomething(flowerToAdd.FlowerName, flowerToAdd.SomeFlowerId.Value, flowerToAdd.PetalAk);
flowerToUpdate.PinkRoseId = pinkRoseId;
_flowerContext.SaveChanges();
}
var firstId = _petalService.GetFlowerIdByName(flowerToAdd.FlowerName, "rose", "petal");
var secondId = _sunService.GetSunIdByTypeOf(flowerToAdd.FlowerName, flowerToAdd.SomeName, "sun");
flowerToAdd.FlowerId = secondId;
flowerToAdd.SomeOtherId = firstId;
flowerToAdd.CreatedDate = DateTime.UtcNow;
flowerToAdd.CreatedByUserID = someId;
_flowerContext.Flowers.Add(flowerToAdd);
_flowerContext.SaveChanges();
}
答案 0 :(得分:1)
在阅读有关实体框架的更多信息时,可以使用方法AddOrUpdate
来添加新记录或更新任何现有记录。旁注:我正在使用EF6(不确定AddOrUpdate是否在任何旧版本中可用)
if (flowerToAdd.SomeFlowerId.HasValue)
{
var flowerToUpdate = _updateService.UpdateFlowerBySomething(flowerToAdd.FlowerName, flowerToAdd.SomeFlowerId.Value, flowerToAdd.PetalAk);
}
_flowerContext.Flower.AddOrUpdate(flowerToUpdate);
-这可以解决问题,并更新了现有记录,而不是添加新记录
根据我的理解,强烈建议不要使用此方法,因为它可以添加新记录。尚未找到另一种解决方案。
我想出了另一种无需使用AddOrUpdate
即可完成此操作的方法
var changeRequest = (from x in _flowerContext.FlowerUpdateSomething
where x.FlowerPrimaryId == flowerToUpdate.FlowerPrimaryId
select x).FirstOrDefault();
changeRequest.PinkRoseId = pinkRoseId;
_flowerContext.SaveChanges();
}
我将解决方案复制到了另一个服务(例如SunFlowerService),如下所示:
public SomeDataBaseEntity UpdateFlower(int id)
{
var changeRequest = (from x in _flowerContext.FlowerUpdateSomething
where x.FlowerPrimaryId == id
select x).FirstOrDefault();
}
但是现在当我像下面这样调用此方法时:
if (flowerToAdd.SomeFlowerId.HasValue)
{
var flowerToUpdate = _updateService.UpdateFlowerBySomething(flowerToAdd.FlowerName, flowerToAdd.SomeFlowerId.Value, flowerToAdd.PetalAk);
var update = _someOtherService.UpdateFlower(flowerToUpdate.Id);
update.PinkFlowerId = pinkFlowerId;
_flowerContext.SaveChanges();
}
它不会更新数据库中的记录。我不确定如何解决此问题,或者为什么会有这种行为。但是保留原始的LINQ查询,如下所示:
var changeRequest = (from x in _flowerContext.FlowerUpdateSomething
where x.FlowerPrimaryId == flowerToUpdate.FlowerPrimaryId
select x).FirstOrDefault();
changeRequest.PinkRoseId = pinkRoseId;
_flowerContext.SaveChanges();
我能够更改数据库中的记录。不知道为什么不能使用另一种方法。