不要使用dapper扩展更新Update方法上的某个属性

时间:2013-11-06 21:17:33

标签: dapper dapper-extensions

我知道我可以使用纯粹的dapper来构建我的更新字符串,只包含我想要更新的属性(白名单)。

我想要的是保持dapper扩展的ORM风格:

con.Update<Person>(person);

我希望某人的某些属性不会更新(黑名单)

如何排除运行.Update扩展方法的更新属性?

你是否知道更精巧的.Update扩展在小巧玲珑的风格? (然后我没有

写下来; - )

3 个答案:

答案 0 :(得分:1)

只需定义一个继承自PersonMapper的{​​{1}},然后使用ClassMapper<Person>映射您要排除的列。

请参阅下面的示例(来源:github tests for Dapper Extensions),其中排除了Ignore()属性(Phones)。

IEnumerable<Phone> Phones

答案 1 :(得分:1)

在相关类型的ClassMapper中,执行以下操作:

public MyTableMapper()
{
    Table("MyTable");
    Map(f => f.MyCalculatedField).ReadOnly();
}

答案 2 :(得分:1)

您可以尝试使用单独的类(例如,Person的后代或其周围的包装器以及忽略该属性的单独映射器)。

但这太难看了,不能成为一个好的解决方案。

DapperExtensions目前对于除显式CRUD任务之外的任何事情都过于简单。我不得不开发一个自定义映射器来添加System.ComponentModel注释支持,这对2015年来说似乎很荒谬。

但添加一个新的UpdatePartial扩展方法看起来不错。