代码之家  ›  专栏  ›  技术社区  ›  Chardeux

c#实体框架-blazor应用程序-ChangeTracker

  •  0
  • Chardeux  · 技术社区  · 2 年前

    我正在blazor应用程序中使用实体框架。我的上下文已确定范围。

    我有一个属性已修改的跟踪实体,但我取消了修改。此实体仍被跟踪,跟踪器中仍包含已取消的修改。

    如果我使用savechanges,取消的修改将在数据库中传播。

    如何避免这种情况?(更改实体的状态以使其不被修改?)

    谢谢你的回答。

    0 回复  |  直到 2 年前
        1
  •  0
  •   Filip Franik    2 年前

    DbContext是一个被设计为寿命极短的类。

    您应该使用IDbContextFactory为每个操作(或一批操作)创建一个新的DbContext,并在它之后立即处理它。如果您不这样做,您充其量只是在代码中引入了内存泄漏,最坏的情况下恰恰是您正在写的不需要的、难以调试的行为。

    如果你需要一些优化,你可以引入DbContext池,通过处理上下文来清理实体跟踪,但保持底层DbConnection实例的活动(建立连接是缓慢的部分)