簡體   English   中英

Dapper UpdateAsync忽略列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM