C# 在ASP.NET Core中使用Dapper更新的更好解决方案

C# 在ASP.NET Core中使用Dapper更新的更好解决方案,c#,asp.net-core,repository,dapper,C#,Asp.net Core,Repository,Dapper,假设我们有一本有十个属性的打字本。此类型是数据库中表的表示形式 更新这样的类型的最佳解决方案是什么?我使用了repository模式,其中我得到了一个更新方法,该方法采用Book类型并更新其所有字段 所以,当我想更新一本书时,我从数据库中通过Id获取它,更新我想要的字段(我可以更新1、2或它的所有字段),然后调用存储库上的更新方法 相比之下,我的朋友告诉我,我们应该只更新我们想要的字段,因此,例如,如果我只想更新字段bookTitle,我应该在repo UpdateTitle等中创建方法 最好的

假设我们有一本有十个属性的打字本。此类型是数据库中表的表示形式

更新这样的类型的最佳解决方案是什么?我使用了repository模式,其中我得到了一个更新方法,该方法采用Book类型并更新其所有字段

所以,当我想更新一本书时,我从数据库中通过Id获取它,更新我想要的字段(我可以更新1、2或它的所有字段),然后调用存储库上的更新方法

相比之下,我的朋友告诉我,我们应该只更新我们想要的字段,因此,例如,如果我只想更新字段bookTitle,我应该在repo UpdateTitle等中创建方法


最好的解决方案是什么?老实说,我在repo update中看到一种方法在所有字段中都比多种方法更新某些部分/一的属性要好得多。

Dapper本身不支持跟踪数据库实体,有些ORMs可以做到这一点(例如)

跟踪允许您将数据库对象加载到模型类实例中,一旦这些对象在代码中更新,您就可以将更改保存到数据库中,生成的查询将只更新更改的字段,正如前面所说的,Dapper不支持这一点


如果您只使用DaPror,我建议保持它简单,保存整个更新的对象,如果有性能问题,请考虑更改该方法。

DAPPER不会为您生成查询。strong>您编写查询并将其传递给Dapper。不跟踪你的类型维护更改的跟踪。Dapper只执行您传入的内容,并将结果映射到您的类型/poco/实体/类(如果适用)。
也就是说,如何更新选定的字段/列?这个问题超出了框架

现在谈谈另一个问题——应该采取什么方法?你提到的两种方法都有各自的优缺点

记住,这是万恶之源。简洁;保持简单。首先更新整个类型。随着时间的推移,如果您面临严重的性能问题,并且您确定问题是由于更新所有字段造成的,请继续优化查询(或编写新查询)以更新所选字段


这将节省您的工作量-如果需要,将有助于提高性能-将使事情保持简单。

使用多个方法来更新属性有什么意义?对我来说没有意义,我相信一个方法更新所有字段更好,对他来说,如果我们只想更新书名,我们应该使用方法UpdateBookTitle,sql命令只更新这一个属性…正如您所说,一个方法更新整个实体。所以,当我只想更新一个字段标题时,我从数据库中获取实体,更改标题并更新整个实体。