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