gpt4 book ai didi

.net-core - 如何在 OData .net core 中修改 Delta Patch 中的对象

转载 作者:行者123 更新时间:2023-12-01 12:06:08 28 4
gpt4 key购买 nike

我有一个与补丁操作中的增量相关的问题。我想拦截对象并更新一个属性
Bacteria.nameShort = HTMLExtractHelper.RemoveUnwantedTags(Bacteria.name);
在每个更新/补丁上。

我可以在 put 和 post 动词中轻松完成这些操作,但 Delta 对象似乎阻止我更新补丁中的属性。

public async Task<IActionResult> Patch([FromODataUri] int key, [FromBody] Delta<Bacteria> Bacteria)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//var entity = await _db.Bacterias.FindAsync(key);
var entity = _db.Bacterias.FirstOrDefault(i => i.bacteriaID == key);
if (entity == null)
{
return NotFound();
}

Bacteria.Patch(entity);
try
{
await _db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!BacteriaExists(key))
{
return NotFound();
}
else
{
throw;
}
}

return Updated(entity);
}

如何在我的 Controller 补丁功能中实现更新属性?

最佳答案

答案似乎比我想象的要容易得多。有 TryGetPropertyValue 和 TrySetPropertyValue 方法可用于获取和设置属性对象的值。示例代码如下。

public async Task<IActionResult> Patch([FromODataUri] int key, [FromBody] Delta<Bacteria> Bacteria)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//var entity = await _db.Bacterias.FindAsync(key);
var entity = _db.Bacterias.FirstOrDefault(i => i.bacteriaID == key);
if (entity == null)
{
return NotFound();
}

object name;
bool bFoundName = Bacteria.TryGetPropertyValue("name", out name);
if (bFoundName)
{
string nameShort = HTMLExtractHelper.RemoveUnwantedTags(name.ToString());
Bacteria.TrySetPropertyValue("nameShort", nameShort);
}

Bacteria.Patch(entity);
try
{
await _db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!BacteriaExists(key))
{
return NotFound();
}
else
{
throw;
}
}

return Updated(entity);
}

关于.net-core - 如何在 OData .net core 中修改 Delta Patch 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56799624/

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