我制作了一个简单的应用程序,你可以给程序 xml 文件,它会根据制造商零件编号将其中的产品配对,但它不会将其保存到数据库中,但是如果产品已经
我制作了一个简单的应用程序,您可以在其中提供程序 xml 文件,它会根据制造商零件编号将其中的产品配对,但它不会将其保存到数据库中,但是如果该产品已经存在于数据库中或者我第二次运行该脚本,它就能完美运行!
代码:
public async Task ImportChsData(DateTime fromDateTime)
{
var chsCikkek = new List<Cikk>();
#if DEBUG
chsCikkek = DeserializeChsResponse(await GetStringFromUrlAsync("######"));
#else
//#####
#endif
var existingTermekek = await _appDbContext.Termekek
.Include(t => t.Arak)
.Include(t => t.Keszletek)
.Include(t => t.NagykerCikkszamok)
.ToDictionaryAsync(t => t.GyartoiCikkszam, t => t);
var newTermekek = new List<Termek>();
var updatedTermekek = new List<Termek>();
var chsdeletelista = new List<string>();
foreach (var chsCikk in chsCikkek)
{
if (chsCikk.Webmegjel == "2" && existingTermekek.TryGetValue(chsCikk.Gycikkszam, out var termek))
{
// Ha a termék törlendő a rendszerből
if (termek.Arak.Any(a => a.ArTipus == "CHS"))
{
chsdeletelista.Add(termek.GyartoiCikkszam);
}
continue;
}
if (existingTermekek.TryGetValue(chsCikk.Gycikkszam, out var existingTermek))
{
// Nagyker cikkszám hozzáadása, ha még nincs
var nagykerCikkszam = existingTermek.NagykerCikkszamok.FirstOrDefault(nc => nc.Nagyker == "CHS");
if (nagykerCikkszam == null)
{
existingTermek.NagykerCikkszamok.Add(new NagykerCikkszam
{
Nagyker = "CHS",
Cikkszam = chsCikk.Cikkszam
});
}
updatedTermekek.Add(existingTermek);
}
else
{
// Új termék létrehozása
await _kategoriaService.AddSzulokategoriaTask(chsCikk.Cikkcsoportnev, chsCikk.Focsoportnev);
var newTermek = new Termek
{
Nev = chsCikk.Cikknev,
Kategoria = await _kategoriaService.GetKategoriaByName(chsCikk.Cikkcsoportnev),
KategoriaId = (await _kategoriaService.GetKategoriaByName(chsCikk.Cikkcsoportnev)).id,
GyartoiCikkszam = chsCikk.Gycikkszam,
Gyarto = chsCikk.Gyarto,
};
if (newTermek.NagykerCikkszamok == null)
{
newTermek.NagykerCikkszamok = new List<NagykerCikkszam>();
}
newTermek.NagykerCikkszamok.Add(new NagykerCikkszam(){Cikkszam = chsCikk.Cikkszam, Nagyker = "CHS", Termek = newTermek});
newTermekek.Add(newTermek);
}
}
// Bulk updates and inserts
if (updatedTermekek.Any())
{
await _appDbContext.BulkUpdateAsync(updatedTermekek);
}
if (newTermekek.Any())
{
await _appDbContext.BulkInsertAsync(newTermekek);
}
await _appDbContext.SaveChangesAsync();
if (chsdeletelista.Count > 0)
{
await _keszletService.RemoveTermek("CHS", chsdeletelista);
}
}
模型类别:
public class NagykerCikkszam
{
[Key]
public int Id { get; set; }
public string? Nagyker { get; set; }
public string? Cikkszam { get; set; }
public int TermekId { get; set; }
[ForeignKey("TermekId")]
public Termek Termek { get; set; }
}
我在 Termek
课堂上说过这样一句话:
public ICollection<NagykerCikkszam> NagykerCikkszamok { get; set; } = new List<NagykerCikkszam>();
我使用 SQL Server 作为我的数据库。此外,使用 BulkInsertAsync 时也不会保存 ár,但使用 BulkUpdateAsync 时会保存
编辑:您可以看到该产品应该有 1 个 NagykerCikkszam:
但是在下一个函数中这行代码:
var existingTermekek = await _appDbContext.Termekek
.Include(t => t.Keszletek)
.Include(t => t.NagykerCikkszamok)
.Where(t => t.NagykerCikkszamok.Any(nc => nc.Nagyker == "CHS" && nc.Cikkszam != null))
.ToDictionaryAsync(
t => t.NagykerCikkszamok.First(nc => nc.Nagyker == "CHS").Cikkszam,
t => t
);
返回 NULL,并且数据库中没有任何内容