首页 > 解决方案 > 错误:“在 dbcontext 中引发了 'System.StackOverflowException' 类型的异常”

问题描述

我在 Mvc 中使用 EF

我有这样的 DbContext 类。

  public class MyContext : IdentityDbContext<ApplicationUser, CustomRole, string, IdentityUserLogin, CustomUserRole, IdentityUserClaim>
{
    public MyContext ()
        : base("MyContextConection")
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
    }

    public DbSet<TicketReply> TicketReplys { get; set; }
    public DbSet<Ticket> Tickets { get; set; }
}

我覆盖SaveChangesAsync

  public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken)
    {

        int result = 0;
        //SuperBaseModel entity = null;
        try
        {
            var entities = ChangeTracker.Entries().Where(x =>
                x.Entity is SuperBaseModel &&
                (x.State == EntityState.Added || x.State == EntityState.Modified)).ToList();

            if (entities.Any())
            {
                var currentUserId =
                    Guid.Parse(Thread.CurrentPrincipal.Identity.GetUserId() ?? Guid.Empty.ToString());

                foreach (var entity in entities)
                {

                    if (entity.State == EntityState.Added)
                    {
                        ((SuperBaseModel)entity.Entity).CreatedDateTime = DateTime.Now;
                        ((SuperBaseModel)entity.Entity).ModifiedDateTime = DateTime.Now;
                        ((SuperBaseModel)entity.Entity).CreatedUserId = currentUserId;
                        ((SuperBaseModel)entity.Entity).ModifiedUserId = currentUserId;
                    }
                    else
                    {
                        ((SuperBaseModel)entity.Entity).ModifiedDateTime = DateTime.Now;
                        ((SuperBaseModel)entity.Entity).ModifiedUserId = currentUserId;
                        entity.Property("CreatedDateTime").IsModified = false;
                        entity.Property("CreatedUserId").IsModified = false;
                    }

                }
            }


            return await base.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException e)
        {
            try
            {
                e.Entries.Single().Reload();
              await  base.SaveChangesAsync();
            }
            catch { }
        }
        catch (Exception e)
        {
            throw e;
        }

        return result;
    }

我收到错误ChangeTracker.Entries().Where

'System.StackOverflowException 类型的异常

标签: asp.net-mvcentity-frameworkmodel-view-controller

解决方案


推荐阅读