用子实体更新(更新后备)实体列表的正确方法?

时间:2019-03-25 07:52:32

标签: c# ef-core-2.2

我正在用EF core构建.net core 2 api。 api获取要使用常规syncItems函数进行同步的实体(DTO)的列表(3K-5K)。

假设以下实体:

       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();

运行非常慢,有时甚至挂起(?) (由于供应商) 我可以从传入列表中提取供应商,并在遍历项目列表之前添加它们,因此供应商代码将始终存在于数据库中。 我只是不确定这是否是正确的方法(?) 大多数在线示例都涉及更新/插入单个项目。

任何见解/帮助都值得赞赏。

0 个答案:

没有答案