Правильный способ обновить (обновить запасной вариант) список сущностей с дочерними сущностями? - PullRequest
0 голосов
/ 25 марта 2019

Я строю .net core 2 api с EF core. API получает список (3K-5K) объектов (DTO) для синхронизации с использованием общей функции syncItems.

предполагают следующие сущности:

       public class supplier
{
    [Key]
    public string supplierCode { get; set; }

    public string name { get; set; }
}

 public class item 
{
    public const int maxItemName = 256;
    public const int maxItemCode = 256;
    public const int maxBarcode = 256;
    [Required]
    [StringLength(maxItemName)]
    public string itemName { get; set; }

    [Required]
    [StringLength(maxItemCode)]
    [Key]
    public string sku { get; set; }

    public supplier supplier { get; set; }


    public ICollection<itemWarehouse> whslines = new List<itemWarehouse>();

    public item()
    {

    }
}


my sync does the following : 

var itemsInApp=_appDbContext.items.ToList();
        // insert or update items.
        items.ForEach(erpitem =>
        {
            bool newflag = false;
            item tempItem = itemsInApp.Where(x => x.sku == erpitem.sku).FirstOrDefault();
            if (tempItem==null) // check if item is null
            {
                tempItem = new item();
                tempItem.sku = erpitem.sku;
                newflag = true;
            }
            tempItem.itemName = erpitem.itemName;
            var sup = _appDbContext.suppliers.SingleOrDefault(su=>su.supplierCode==erpitem.supplierCode);
            if (sup == null)
            {
                sup = new supplier { supplierCode = erpitem.supplierCode, name = erpitem.supplierName };
            }
            tempItem.supplier = sup;
            if (newflag)
                _appDbContext.items.AddAsync(tempItem);
        });
        if (_appDbContext.ChangeTracker.HasChanges())
            await _appDbContext.SaveChangesAsync();

Это работает очень медленно, а иногда даже зависает (?) (за счет поставщика) Я могу извлечь поставщиков из входящего списка и добавить их перед циклом по списку товаров, поэтому код поставщика всегда будет существовать в БД. Я просто не уверен, что это правильный способ сделать это (?) большинство онлайн-примеров посвящено обновлению / вставке одного элемента.

Любое понимание / помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...