【发布时间】:2021-09-13 04:10:51
【问题描述】:
我目前面临更新数据库中多条记录的问题。我想在用户付款时创建收据时更新用户创建的项目列表。
这是我更新它们的 API 方法。
[HttpPut("update-items")]
public ActionResult UpdateListOfItems(IEnumerable<ItemUpdateDTO> itemUpdateDTOs)
{
if(itemUpdateDTOs == null)
{
return BadRequest();
}
var items = _mapper.Map<IEnumerable<Item>>(itemUpdateDTOs);
_repository.UpdateRangeItem(items);
return Ok("Updated items!");
}
这是我的项目更新 DTO
public class ItemUpdateDTO
{
[Required]
public int ID { get; set; }
public FishUpdateDTO Fish { get; set; }
[Required]
public ReceiptUpdateDTO Receipt { get; set; }
}
这是表“Item”的实体模型
public class Item
{
[Key]
public int ID { get; set; }
[Required]
public int FishID { get; set; }
public Fish Fish { get; set; }
[Required]
public int QuantityOrdered { get; set; }
[Required]
public float TotalPrice { get; set; }
public Receipt Receipt { get; set; }
public User Customer { get; set; }
}
这是“类别”的实体模型
public class FishCategory
{
[Key]
[Required]
public int ID { get; set; }
[Required]
[MaxLength(50)]
public string Category { get; set; }
public IEnumerable<Fish> Fish { get; set; }
}
这里是存储库方法。
public void UpdateRangeItem(IEnumerable<Item> items)
{
_databaseContext.Items.UpdateRange(items);
_databaseContext.SaveChanges();
}
这里是物品表:
和收据表:
我正在尝试使用收据 id 作为项目表中的外键来更新项目表。但是,我收到一个错误:
UPDATE 语句与 FOREIGN KEY 约束“FK_Fishes_Categories_CategoryID”冲突。冲突发生在数据库“EFishing”、表“dbo.Categories”、列“ID”中。
目前,我正在使用称为 UpdateRange() 的 DatabaseContext 方法在一次调用数据库中更新一系列行。
任何解决方案都可以。谢谢
【问题讨论】:
-
您遇到 SQL Server 错误,提示您发送到 Fish 表的数据无效。您可以添加 Fish 表的定义,以及您作为
itemUpdateDTOs发送的数据吗? -
另外,请注意语言 sn-p 功能仅适用于 JS/HTML,并非适用于所有语言。
-
您为什么不查看您发送的数据 (
items)?很明显,您正在尝试保存表Category中不存在的CategoryID。这就是我们可以告诉您的全部内容,但这只是对异常消息的重新表述。 -
@GertArnold 感谢您重新表述异常消息,但有趣的是,“类别”表中有数据。
-
@GertArnold 我明白你的意思。我设法通过仅传递“categoryId”而不是另一个“Category”类型的内部类来解决它。
标签: c# asp.net-core asp.net-web-api entity-framework-core asp.net-core-webapi