[英]Ignore a property only on Update with Dapper?
作為我的數據訪問層的一部分,我使用Dapper與DapperExtensions並用模型表示我的數據庫實體。 其中一些模型包含用於記錄或更改跟蹤的字段,如下所示:
public class ExampleClass : BaseModel, ITypeWithChangeTracking
{
public int ExampleClassId { get { return Id; } set { Id = value; } }
public DateTime CreatedDate { get; set; }
public string CreatedBy { get; set; }
// More properties
}
public class ExampleClassMapper : ClassMapper<ExampleClass>
{
public ExampleClassMapper() : base()
{
Map(m => m.ExampleClassId).Key(KeyType.Identity);
Map(m => m.Id).Ignore();
base.AutoMap();
}
}
在這個例子中,BaseModel是一個抽象類,它指定模型有一些整數Id(以便更容易使用泛型); ITypeWithChangeTracking指定它應具有更改跟蹤字段。 到目前為止,我已經能夠將大多數DAL邏輯轉換為可以在所有模型之間共享的通用實現,並且我希望將其與實現更改跟蹤的那些保持一致。
C#
短小精悍的
DapperExtensions
插入對象時應設置某些更改跟蹤字段,但在更新時不應設置。 我在以通用方式實現它時遇到了麻煩,可以為每個模型重用它。
我可以使用Dapper或DapperExtensions來指定一個字段應該包含在插入中,但是忽略了更新嗎?
我已經查看了各種屬性,例如ReadOnly和Ignore用於映射,但到目前為止,我發現的所有內容都是“始終包含”或“始終忽略”。 我希望這可以使用標准的Update()函數,而不需要專門的sproc,盡管我不確定是否可行。 我缺少任何漏洞或有用的裝飾者?
(注意:如果有一種方法可以將這個規范一直調到ITypeWithChangeTracking界面,那么主要的布朗尼點就會出現!)
編輯:
我沒有創建單獨的模型,而是調整了已經從ITypeWithChangeTracking設置更改跟蹤值的代碼,以便它可以識別未設置的值(null,DateTime.Min等)。 它已經檢查了記錄是新的還是以前存在的,所以如果1)記錄確實存在並且2)模型沒有設置更改跟蹤值,我就從現有記錄中獲取相關值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.