首页 > 解决方案 > 无法在循环中更新 DeletedAt 列

问题描述

我正在尝试更新数据库中所有的删除列,AppGuidAppGuid不在新的有效负载(来自 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();
    }
}

标签: c#entity-framework-core

解决方案


要找到那些“删除”(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();


推荐阅读