8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

实体框架不保存数据到数据库

Fredrik Lundström 1月前

20 0

我制作了一个简单的应用程序,你可以给程序 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,并且数据库中没有任何内容

帖子版权声明 1、本帖标题:实体框架不保存数据到数据库
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Fredrik Lundström在本站《entity-framework》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 你好!因此,将 await _appDbContext.BulkInsertAsync(newTermekek); 更改为 await _appDbContext.Termekek.AddRangeAsync(newTermekek); 可以解决问题,但这对性能有影响吗?

返回
作者最近主题: