【问题标题】:How to override the SaveChangesAsync of any DbContext globaly?如何全局覆盖任何 DbContext 的 SaveChangesAsync?
【发布时间】:2019-06-05 07:23:46
【问题描述】:

我想覆盖

public virtual Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);

我的解决方案中的任何DbContext 全局并将其更改为

public virtual Task<MyDatabaseReturnModel> SaveChangesAsync(CancellationToken cancellationToken = default);

这可能吗?

【问题讨论】:

  • 为什么?你想做什么?MyDatabaseReturnModel 来自哪里? SaveChanges 应该保存更改,而不是执行额外的查询。
  • 这看起来像XY problem。你有一个问题 X 并假设 Y 是解决方案。当这不起作用时,你问的是 Y,而不是实际的问题 X。你想解决的实际问题是什么?
  • 不是 XY 问题,谢谢。
  • 所以它一个XY问题。您想要记录异常。这是您的日志库 的工作,而不是实体框架。实际上,如果您使用 .NET Core 的日志基础架构that may work already,您可以配置 EF Core 以将其消息记录到您的日志提供程序
  • 除此之外,异常就像熔断的保险丝。您不能只是记录它们而忘记它们。它们应该在有意义的最高级别进行处理。如果保存到数据库失败,那么用户在此之前所做的所有操作也应该会失败。

标签: c# .net ef-core-2.0


【解决方案1】:

这可能吗?

没有。您不能通过重写来更改方法的 签名。您只能更改实现SaveChangesAsync 方法仍必须返回 Task&lt;int&gt;int。这就是它的定义方式。

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多