在调用者而不是被覆盖的方法中抛出异常时换行

我已经覆盖了 DBContext 中的 SaveChanges 方法,以便检测具有 Created/Update 信息的表并自动处理更新,如下所示:


public partial class MyContext

{

    private readonly ITokenService _tokenService;


    public MyContext(ITokenService tokenService, DbContextOptions options) : base(options)

    {

        _tokenService = tokenService;

    }

    public override int SaveChanges()

    {

        var entities = ChangeTracker.Entries().Where(entry => entry.Entity is ITrackingEntities);

        foreach (var entityEntry in entities)

        {

            if (entityEntry.State == EntityState.Added)

            {

                ((ITrackingEntities) entityEntry.Entity).CreatedBy = _tokenService.LoginUserId;

                ((ITrackingEntities) entityEntry.Entity).CreatedDateUtc = DateTime.UtcNow;

            }


            ((ITrackingEntities) entityEntry.Entity).UpdatedBy = _tokenService.LoginUserId;

            ((ITrackingEntities) entityEntry.Entity).UpdatedDateUtc = DateTime.UtcNow;

        }

        return base.SaveChanges();

    }

}

但是,每当我编写一些在存储库层中引发异常的 EF 代码时,异常换行符会发生在我的重写方法SaveChanges()中,而不是来自调用存储库方法,当我SaveChanges()在一个方法中多次调用时,这会使调试变得很痛苦。


有什么方法可以指示调试器不要在我的重写SaveChanges()方法中换行,而不是从该方法的调用者那里换行?


慕的地6264312
浏览 154回答 1
1回答

慕尼黑的夜晚无繁华

顺其自然,我在发布问题 5 分钟后找到了解决方案。对于需要这种功能的其他任何人,该属性[System.Diagnostics.DebuggerStepThrough]就是您要寻找的,因此我发布的方法变为:[System.Diagnostics.DebuggerStepThrough]public override int SaveChanges(){    var entities = ChangeTracker.Entries().Where(entry => entry.Entity is ITrackingEntities);    foreach (var entityEntry in entities)    {        if (entityEntry.State == EntityState.Added)        {            ((ITrackingEntities) entityEntry.Entity).CreatedBy = _tokenService.LoginUserId;            ((ITrackingEntities) entityEntry.Entity).CreatedDateUtc = DateTime.UtcNow;        }        ((ITrackingEntities) entityEntry.Entity).UpdatedBy = _tokenService.LoginUserId;        ((ITrackingEntities) entityEntry.Entity).UpdatedDateUtc = DateTime.UtcNow;    }    return base.SaveChanges();}这会将异常“冒泡”给调用者,因此您可以更轻松地调试问题。但是,我会谨慎使用它,因为该方法现在将报告自定义覆盖之外的错误。
打开App,查看更多内容
随时随地看视频慕课网APP