gpt4 book ai didi

c# - 更新 Entity Framework 实体与其他实体的多种关系

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:08 24 4
gpt4 key购买 nike

我正在使用具有 Entity Framework 核心的网络 API。我有一个 Worker 实体,它与公司(通过 CompanyId)、状态(通过 StatusId)和职位(通过 PositionId)有关系。通过 API 使用请求我希望能够更新工作人员。

我只想传递 WorkerId 和 PositionId 的请求。在数据层中,我检查是否存在请求中的 PostiionId,如果不存在,则返回 Controller 并显示未找到位置的消息。以下是未进行公司和状态检查的代码示例。

Public void Update(WorkerEntity worker)
{
var workerRecord = _context.WorkerEntity.SingleOrDefault(w => w.Id == worker.Id);

if (workerRecord == null)
{
Log.Logger("Cannot find the worker with Id " + worker.Id);
return;
}

var positionRecord = _context.PositionEntity.SingleOrDefault(w => w.Id == worker.PositionId);

if (positionRecord == null)
{
Log.Logger("Cannot find the position with Id " + worker.PositionId);
return;
}

workerRecord.Position = positionRecord;
_context.SaveChanges();
}

我还尝试了一种使用 .Single 的简单方法,如果记录确实存在则捕获错误,但捕获仅输出通用的“序列不包含元素”,这对了解没有帮助实体失败。

有没有更简单的方法来检查用户在请求中添加的关系 ID 是否是假的,而无需检查 ID 是否存在的行和代码?该表可能有 3 个关系,但我有另一个表有 5 个关系,如果检查为空,则有 5 个关系。

最佳答案

要获得有意义的消息,您必须手动检查每个字段。它可以使用 Any() 方法稍微简化。

if (!context.PositionEntity.Any(w => w.Id == worker.PositionId)
{
Log.Logger("Cannot find the position with Id " + worker.PositionId);
return;
}

您无法从 EF 异常中获得描述性错误消息。

但是你真的要这么做吗?我假设您将这些查找值(位置、状态等)作为前端的下拉列表,您可以在其中使用数据库中的值加载它们。因此在正常情况下,无法选择不正确的值并将其发送到 API。但是,如果确实如此,您会遇到 EF 核心默认错误以避免搞砸。

干杯,

关于c# - 更新 Entity Framework 实体与其他实体的多种关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57375473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com