我知道我可以使用纯粹的dapper来构建我的更新字符串,只包含我想要更新的属性(白名单)。
我想要的是保持dapper扩展的ORM风格:
con.Update<Person>(person);
我希望某人的某些属性不会更新(黑名单)
如何排除运行.Update扩展方法的更新属性?
你是否知道更精巧的.Update扩展在小巧玲珑的风格? (然后我没有
写下来; - )
答案 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扩展方法看起来不错。