[英]I have to update SQL value using HttpPost in dotnet core 2.0
我有一个需要使用的外部API资源。 该API向我发送触发器作为发布请求。 我需要做的是获取值,并更新SQL中的当前对应记录。 我提出的代码不断为数据库添加新值。
[HttpPost("status")]
public async Task<IActionResult> Post(CompletionForCreateDto
completionForCreateDto)
{
// che ck the model state
if (!ModelState.IsValid)
return BadRequest(ModelState);
// find the incoming trigger information and map them to the disctionary
var form = Request.ReadFormAsync();
var formData = form.Result;
Dictionary<string, string> ddata = new Dictionary<string, string>();
foreach ( var key in formData.Keys)
{
var value = formData[key.ToString()];
ddata.Add(key, value);
}
// find the existed completion by ID
int id = Int32.Parse(ddata["record"]);
var completion = await repository.GetCompletion(id);
completion = mapper.Map<CompletionForCreateDto, Completion>(completionForCreateDto);
if (completion == null)
return NotFound();
// some test values to make sure it works.
completion.VitalSignBLA = ddata["vital_signs_spring_complete"];
completion.VitalSignBLADateTime = DateTime.Now;
// repository.Add(completion); ==> adds value as a new record
// repository.Update(completion);==> adds value as a new record
repository.Attach(completion); // ==> adds value as a new record
// SaveChanges()
await unitOfWork.CompleteAsync();
return Ok();
}
在上面,首先我得到触发器并将其放入字典中以便可以使用。 然后,我尝试使用它们的record
值在我的sql servere中找到存在的触发器记录。 触发器的record
和SQL record
值是相同的值。 之后,我使用一些数据对其进行测试。 最后,我使用上下文Add
, Update
和Attach
来更新SQL数据库。 对于所有情况,发布请求都将添加新行。
我是dotnet核心的新手。 我不确定这是因为我使用了HttpPost
属性或代码本身。 任何帮助都将被申请!
EF将实体附加到上下文时(通过附加,更新,添加或通过设置其状态)为实体生成插入语句的最可能原因是PK中缺少值(最常见的是ID),但PK可能更多在其他情况下是复杂的)。
当不存在PK时,EF无法知道您所指的是哪个实体,因此它将状态设置为“新建”。 在您的代码中,我怀疑这正在引起您的问题:
var completion = await repository.GetCompletion(id);
completion = mapper.Map<CompletionForCreateDto, Completion>(completionForCreateDto);
您正在从存储库中获取一些数据,然后通过mapper.Map(completionForCreateDto);生成一个新实体。 我怀疑该代码未设置PK值,从而导致了您的问题。 天真的解决方法是在mapper.map之后设置这些值。 或更新映射以映射值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.