c# - 无法在循环中更新 DeletedAt 列
问题描述
我正在尝试更新数据库中所有的删除列,AppGuid
但AppGuid
不在新的有效负载(来自 API)中更新删除列与当前日期和时间。
该声明x.DeletedAt = DateTime.Now;
没有命中,我无法定义正确的条件。
public async Task TestDeleteApps()
{
var request = new HttpRequestMessage(HttpMethod.Get, "apps?per_page=200");
var response = await _client_SB.SendAsync(request);
var json = await response.Content.ReadAsStringAsync();
AppsClass.AppsRootobject model = JsonConvert.DeserializeObject<AppsClass.AppsRootobject>(json);
using (var scope = _scopeFactory.CreateScope())
{
var _DBcontext = scope.ServiceProvider.GetRequiredService<PCFStatusContexts>();
foreach (var item in model.resources)
{
var g = Guid.Parse(item.guid);
var x = _DBcontext.Apps.FirstOrDefault(o => o.AppGuid == g);
if (x == null)
{
_DBcontext.Apps.Add(new Apps
{
AppGuid = Guid.Parse(item.guid),
Name = item.name,
State = item.state,
CreatedAt = item.created_at,
UpdatedAt = item.updated_at,
SpaceGuid = Guid.Parse(item.relationships.space.data.guid),
Foundation = 2,
Timestamp = DateTime.Now
});
}
else if (x.UpdatedAt != item.updated_at)
{
x.State = item.state;
x.CreatedAt = item.created_at;
x.UpdatedAt = item.updated_at;
x.DeletedAt = null;
x.Timestamp = DateTime.Now;
}
else if (x.AppGuid.ToString() != item.guid)
{
x.DeletedAt = DateTime.Now;
}
}
await _DBcontext.SaveChangesAsync();
}
}
解决方案
要找到那些“删除”(DeletedAt = DateTime.Now
),请在另一个方法/过程中执行此操作:
var guids = model.resources.Select( r => Guid.Parse(r.guid) );
var apps = _DBcontext.Apps.Where(o => guids.Contains(o.AppGuid) == false && o.Foundation == 2);
foreach( var app in apps )
{
app.DeletedAt = DateTime.Now;
}
await _DBcontext.SaveChangesAsync();
推荐阅读
- sql - 具有多个嵌套 Else 的 case 语句
- python - 读取行/字符串的某些部分
- jmeter - 是否有原因我无法启动 HTTP(S) 测试脚本记录器
- reactjs - React Hook 表单 + Material UI 复选框
- html - 如何调整图像大小以适合移动设备?
- fullcalendar - 将日历显示下载为 CSV/XL 文件
- python - 具有多个参数的 Python 函数
- c++ - 私有成员数据不可用于公共成员函数
- javascript - JS:按数组过滤对象数组,当对象键是对象数组时
- android - FileReader 无法从相机读取文件 - Xamarin + WebView