EF Core как обновить сущность на основе свойств объекта - PullRequest
0 голосов
/ 03 октября 2018

Я использую .net core и ef core 2.1.У меня есть следующий фрагмент кода, где я пытаюсь получить список объектов из моего контекста.Затем я хочу выполнить некоторые операции на основе этого списка, а затем обновить сущность и сохранить ее.Как бы я поступил так?Я открыт для предложений о том, как лучше это структурировать.

item = await _context.Items
    .Where(i => i.ItemId == xxx)
    .ToListAsync();

IList<Item> updatedItems;

if (items.Count > 0) {
    var docEntry = _context.Entry(documents);

    //cast the collection to Document type
    updatedItems = (IList<Items>)ds.PerformAction(items);  //perform some action in another service class and return a collection of updated items

    //now I want to merge/update my context to reflect the updated items
    foreach (Item itm in updatedItems){
        //update my context items
        item.ItemColor = itm.ItemColor //for matched items
    }
}

await _context.SaveChangesAsync();

1 Ответ

0 голосов
/ 03 октября 2018

Если вы не можете изменить ds.PerformAction для внесения изменений в исходные объекты, объедините результаты со списком исходных элементов, чтобы сопоставить обновленный элемент с исходной сущностью элемента:

var mappedItems = items.Join( 
    updatedItems, 
    // join criteria (pk selector)
    oi => oi.ItemId, 
    ii => ii.ItemId,
    ( oi, ii ) => new
        {
            OriginalItem = oi,
            UpdatedItem = ii,
        } );

Затемвыполните все, что вам нужно сделать в цикле или аналогичной конструкции:

foreach( var at in mappedItems )
{
    at.OriginalItem.ItemColor = at.UpdatedItem.ItemColor;
}
...