为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕的地6264312 2022-06-12 10:44:47
我已经覆盖了 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()方法中换行,而不是从该方法的调用者那里换行?
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

顺其自然,我在发布问题 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();

}

这会将异常“冒泡”给调用者,因此您可以更轻松地调试问题。但是,我会谨慎使用它,因为该方法现在将报告自定义覆盖之外的错误。


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号