为什么我会随机失去价值属性?

时间:2019-08-27 18:15:49

标签: .net-core asp.net-core-2.2 ef-core-2.2

我有一段代码可以使用某种逻辑来重新处理api rest服务控制器中的一组实体。 在生产环境中,就这样的逻辑意义而言,我已经开始无法获得异常了:

>Mensaje:Value cannot be null.
>Parameter name: source
>Source:System.Linq
>InnerException:
>StackTrace:   at System.Linq.Enumerable.Where[TSource](IEnumerable`1 source, >Func`2 predicate)

当我尝试在本地环境中重现错误或在生产环境中重现事件时,我发现这种错误是随机发生的,因此很难重现。

经过大量测试,我一次又一次在调试时重现异常,我发现从一行到另一行,我得到的实体属性之一为空,没有我能理解的理由。

首先,我认为也许我只在一个数据库上下文实例中使用了太多实体,所以我尝试列出较小的列表。但是错误仍然在发生。确实只有15个实体,我仍然得到了例外。

这是代码结构的外观:

private static void StartProces( List<Someentitie> someentitie)
{
    const int packageAmount = 200;
    var index = 0;

    while (indice < fichadas.Count )//sometimes are 15, sometimes are 10.000. I get the error in both cases.
    {
        var myEntitiePackage = someentitie.Skip(index).Take(packageAmount).Select(f => f.Id).ToList();
        index += packageAmount - 1;

        var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
        optionsBuilder.UseSqlServer(AppSettingsHelper.ConnectionStrings.DefaultConnection)
            .UseLoggerFactory(LoggingHelper.LoggerFactory);
        var newDb = new MyContext(optionsBuilder.Options);

        var myEntities = newDb.Entities.Where(f => myEntitiePackage.Contains(f.Id)).Include(f => f.subEntitie)
            .Include(f => f.anotherSubEntitie)
            .Include(f => f.AnotherSubSubEntitite).ToList();

        myEntities.ForEach(f =>
        {
            f.ReProcess(dbNuevo);
        });
    }       
}


public void ReProcess(MyContext db)
{
    CleanAndSaveMyEntitie(db);
    FillEntitieWithBasicAttributesAndSave(db)

    // At this point this.importantAttribute has a value

    new AuditoryLine(this, userId).Create(db);
    db.SaveChanges();

    // At this point this.importantAttribute is null


    ....
}

0 个答案:

没有答案