[英]Dapper UpdateAsync ignore column
我正在嘗試使用Dapper.Contrib更新此表:
public class MyTable
{
public int ID { get; set; }
public int SomeColumn1 { get; set; }
public int SomeColumn2 { get; set; }
public int CreateUserID { get; set; }
public int UpdateUserID { get; set; }
}
我不想更新CreateUserID列,因為它是一個更新方法,所以我想在調用Dapper - Update.Async(entity)方法時忽略此列。
我嘗試使用[NotMapped]和[UpdateIgnore]屬性,但沒有幫助。
注意:我仍然希望在插入操作上傳遞此列,因此,[Computed]和[Write(false)]不合適。
有人可以幫我弄清楚在更新數據庫中的表時如何忽略此列?
提前致謝。
好吧,它只是不受支持。 這是相關問題 ,只有在Dapper v2中才能得到解決方案。 您還可以檢查源代碼 (它非常簡單)並查看更新的屬性,如下所示:
var allProperties = TypePropertiesCache(type);
keyProperties.AddRange(explicitKeyProperties);
var computedProperties = ComputedPropertiesCache(type);
var nonIdProps = allProperties.Except(keyProperties.Union(computedProperties)).ToList();
因此,包括未標記為Key \\ ExplicitKey \\ Computed且可寫入的所有屬性。 對於InsertAsync
也是InsertAsync
(除了帶有ExplicitKey
屬性也包含在插入中,但是你不能在你的situtaion中使用這個屬性,因為你的屬性畢竟不是鍵)。
因此,您必須等待實現,自行分叉和實現,或者只編寫自己的UpdateAsync
方法。 您可以從源代碼中看到它非常簡單並且不難重新實現。
正如@Evk在他的回答中已經提到的,還沒有實現解決方案。 他還提到了解決方法。
除此之外,您可以選擇使用Dapper( IDbConnection.Execute(...)
)直接繞過此特定情況的Dapper.Contrib。
我有一個類似的問題(盡管有DapperExtensions),特殊的列更新和其他復雜的查詢,DapperExtensions根本無法生成或需要很多工作來實現它。
我直接使用Dapper而不是DapperExtensions用於該特定情況; 項目的其他部分仍然受益於DapperExtensions。 這就像踩踏。 這種情況非常有限。 我發現這是更好的解決方案,而不是為此調整/強制DapperExtensions。 這也節省了我的時間和努力。
我建議使用[Computed]
屬性。
[Computed]
- 此屬性已計算,不應成為更新的一部分
但是,看起來Dapper.Contrib的文檔措辭令人困惑。 [Computed]
屬性在插入時似乎也會被忽略 - 這可能適用於您的用例,也可能不適用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.