gpt4 book ai didi

dapper - 是否有更干净的 Dapper 方法来仅更新随 Dapper 更改的列?

转载 作者:行者123 更新时间:2023-12-02 09:13:35 28 4
gpt4 key购买 nike

我正在寻找一种方法来仅更新 Dapper 中的设置属性。即仅当实体的属性不为空时才更新实体的属性。

我正在用一种相当粗糙的方法解决同样的问题,如下所示,但我相信应该有一种更简洁的方法来做到这一点。

 public void UpdateCustomer(Customer cust)
{
try
{
StringBuilder sb = new StringBuilder("UPDATE CUSTOMER_SETUP SET DATE_MODIFIED = @DATE_MODIFIED ");
if(cust.BUSINESSNAME != null) sb.Append(",BUSINESSNAME = @BUSINESSNAME ");
if (cust.BUSINESS_ADDRESS != null) sb.Append(",BUSINESS_ADDRESS = @BUSINESS_ADDRESS ");
if (cust.CONTACT_NAME != null) sb.Append(",CONTACT_NAME = @CONTACT_NAME ");
if (cust.CONTACT_TITLE != null) sb.Append(",CONTACT_TITLE = @CONTACT_TITLE ");
if (cust.CONTACT_PHONE1 != null) sb.Append(",CONTACT_PHONE1 = @CONTACT_PHONE1 ");
if (cust.CONTACT_PHONE2 != null) sb.Append(",CONTACT_PHONE2 = @CONTACT_PHONE2 ");
if (cust.CONTACT_EMAIL != null) sb.Append(",CONTACT_EMAIL = @CONTACT_EMAIL ");
if (cust.CONTACT_URL != null) sb.Append(",CONTACT_URL = @CONTACT_URL ");
if (cust.DATE_CREATED != null) sb.Append(",DATE_CREATED = @DATE_CREATED ");
if (cust.CUSTOMER_TYPE != null) sb.Append(",CUSTOMER_TYPE = @CUSTOMER_TYPE ");
if (cust.SUBSCRIPTION_TYPE != null) sb.Append(",SUBSCRIPTION_TYPE = @SUBSCRIPTION_TYPE ");


sb.Append("WHERE ID = @ID ");
sb.Append("; SELECT CAST(SCOPE_IDENTITY() as int ");

var sql = sb.ToString();


using (connection = new SqlConnection(connectString))
{
connection.Execute(sql, cust);

}
}
catch (Exception ex)
{
throw ex;
}
}

最佳答案

您正在寻找的功能称为更改跟踪。此功能是更大的工作单元模式的一部分。
Dapper 不支持更改跟踪。
很少有 Dapper 的附加组件在不同级别支持这一点。引用 this this比较图表的博客文章。正如图表中提到的,Dapper.Contrib 和 Dapper.Rainbow 以不同的方式支持它。
正如@MarcGravell 在评论中所说,null POCO 属性的值很常见。它并不总是意味着“不更新该字段”。这也可能意味着“将该 DB 字段设置为 null(或 DBNull)”。因为属性值是 null 没有任何保证的含义。 ,大多数 ORM 以与 Dapper 相同的方式实现它。

关于dapper - 是否有更干净的 Dapper 方法来仅更新随 Dapper 更改的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49303407/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com