Ezi*_*nze 7 .net c# entity-framework dapper .net-core
我们在我们的应用程序中使用Dapper和Dapper.Contrib。我们选择Dapper它是因为它更快,而且由于负载较重,速度对我们来说就是一切。现在看来“更改字段跟踪”对我们来说至关重要。现在Dapper.Contrib创建update始终设置所有字段的查询,这样的查询会使它们变慢。一些表现在有大约 30 列,并且完全更新该表中的行效率非常低。
据我所知,Dapper.Contrib有Change tracking per object,但Change tracking per field没有被引入图书馆。
我非常仔细地进行了研究,发现该领域还没有开展任何工作。那个不幸的研究让我感到困惑。我想听听您的想法:
Get如果您使用和Update方法,并且您将Update使用 检索到的同一对象(在对其进行更改之后)交给Dapper.Contrib,则 Dapper.Contrib 可以进行更改跟踪Get。
每个字段的更改跟踪无关紧要。更改一个字段,您仍然需要写入整个记录。
如果您确实只想更改一个字段(或两个...)而不产生写入整个记录的成本,则必须执行以下操作:
conn.Execute(
@"UPDATE MyTable SET MyField=@myParameter WHERE ID = @id",
new { myParameter = myNewValue, id=myID });
Run Code Online (Sandbox Code Playgroud)
注意:您可能会在此处找到对每个字段更改跟踪的支持。它不在 Dapper 中,因为:
这不是我们想要与 Dapper 合作的方向。如果您想要对对象进行完整的更改跟踪或更新,我会推荐一种 ORM,它接受与更改跟踪相关的这些额外成本,例如实体框架。这不是我们想要的核心 Dapper 库中的东西。——尼克·克拉弗