c# - 为什么将 "Change Tracking of fields"添加到 Dapper 是好主意还是坏主意?

标签 c# .net entity-framework .net-core dapper

我们正在使用 DapperDapper.Contrib在我们的应用程序中。我们选择Dapper因为它更快,而且由于重载,速度对我们来说就是一切。现在看来 “更改字段跟踪”对我们至关重要。现在 Dapper.Contrib创建 update始终设置所有字段的查询,这样的查询使它们变慢。一些表现在有大约 30 列,完全更新这些表中的行效率非常低。
如我所见 Dapper.ContribChange tracking per object , 但是 Change tracking per field没有介绍给图书馆。
我非常仔细地进行了研究,发现在该领域没有进行任何工作。那个倒霉的研究让我很困惑。我想听听你的想法:

  • 如果没有实现这样的扩展,那么它可能没有用吗?我在这里缺少什么?
  • 请把你自己放在我的鞋子里。你会怎么做?转移到 EF 或向 Dapper.Contrib 引入“Chnage 跟踪”?
  • 可能添加此类功能会使 Dapper 变慢,这就是该功能尚未实现的原因?
  • 最佳答案

    如果您使用 Get,Dapper.Contrib 可以进行更改跟踪和 Update方法,和你手Update使用 Get 检索到的相同对象(在对其进行更改后) .
    每个字段的更改跟踪是无关紧要的。更改一个字段,您仍然必须编写整个记录。
    如果您真的只想更改单个字段(或两个...)而不产生编写整个记录的成本,则必须执行以下操作:

    conn.Execute(
        @"UPDATE MyTable SET MyField=@myParameter WHERE ID = @id",
        new { myParameter = myNewValue, id=myID });
    
    注意:您可能会发现支持按字段更改跟踪 here .它不在 Dapper 中,因为:

    This isn't a direction we want to go with Dapper. If you want full change tracking or updates for objects I would recommend one of the ORMs that accepts these additional costs associated with change tracking like Entity Framework. It's just not something we want in the core Dapper library. -- Nick Craver

    关于c# - 为什么将 "Change Tracking of fields"添加到 Dapper 是好主意还是坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63254148/

    相关文章:

    database - 当我想使用 db-migration 更新数据库时如何防止数据丢失?

    c# - 更新 Entity Framework 中的计算列

    c# - EWS FindItemsResults<Item> Item.Move() 不会将某些项目类型移动到邮件文件夹,例如 IPM.Appointment

    c# - Fusion 日志在 "Could not load file or assembly"之后没有显示错误

    c# - 无法加载文件或程序集

    c# - 为什么打字机会吐出两个 .ctor 方法?

    .net - 工作单元实现

    c# - 如何产生随机数?第一个和最后一个数字必须相同

    c# - 如何在WPF中闪烁RichTextBox边框和背景色

    .net - guid 的安全性是否值得信任,或者如果可以强制系统生成许多已知的 guid,它们是否可以预测?