C# Dapper UpdateSync忽略列

C# Dapper UpdateSync忽略列,c#,dapper,dapper-contrib,C#,Dapper,Dapper Contrib,我正在尝试使用Dapper进行更新。请更改此表: 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; } } 我

我正在尝试使用Dapper进行更新。请更改此表:

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)]不合适

有人能帮我找出在更新数据库中的表时如何忽略此列吗?

我建议使用该属性

[Computed]
-此属性是计算的,不应作为更新的一部分


但是,Dapper.Contrib的文档似乎措词混乱。插入时,
[Computed]
属性似乎也被忽略-这可能适用于您的用例,也可能不适用于您的用例。

好吧,它只是不受支持。这里是相关的,解决方案只在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
(insert中也包括带有
ExplicitKey
的属性除外,但您不能在位置中使用此属性,因为您的属性毕竟不是键)


因此,您要么等待实现,要么自己动手实现,要么编写自己的
UpdateAsync
方法。您可以从源代码中看到它非常简单,并且不难重新实现。

正如@Evk在他的回答中已经提到的,目前还没有实现任何解决方案。他还提到了解决办法

除此之外,对于这种特殊情况,您可以选择直接绕过Dapper.Contrib使用Dapper(
IDbConnection.Execute(…)

对于特定的列更新和其他复杂的查询,DapperExtensions要么根本无法生成,要么需要做很多工作才能实现,我也遇到了类似的问题(尽管DapperExtensions)


对于那个特殊的情况,我直接使用简洁而不是简洁;项目的其他部分仍然受益于DapperExtensions。这就像是踩下。这种情况非常有限。我发现这是更好的解决方案,而不是为此调整/强制DapperExtensions。这也节省了我的时间和精力。

我以前已经尝试过了,但它无法用于插入操作,因为它忽略了它。我只需要在更新时忽略它。如果您使用的是存储库模式/或任何关闭模式(并且您应该将代码与具体实现分离),您可以简单地覆盖
Update
,并使用您自己的逻辑。