所以我有一个类有这样一个属性的类:
public class Foo
{
[Column("GBBRSH")
public static string Gibberish { get; set;}
....
}
为了保存数据,我对其进行了配置,以便更新/插入语句使用自定义函数:
public static string GetTableColumnName(PropertyInfo property)
{
var type = typeof(ColumnAttribute);
var prop = property.GetCustomAttributes(type, false);
if (propr.Count() > 0)
return ((ColumnAttribute)prop.First()).Name;
return property.Name;
}
这处理得很好,但是我注意到当我去检索数据时,它实际上并没有通过该特定列的函数提取数据。我注意到其他数据被拉了,但是有问题的列是唯一没有检索数据的字段。
1)是否有办法将GetTableColumnName函数用于Dapper的检索部分?
2)如果出现这种情况,是否有办法强制Dapper.NET抛出异常?我真的不希望有一种虚假的安全感,一切都按预期工作,但实际上并非如此(我得到的是我使用Dapper.NET默认不使用的映射,但我确实想要以这种方式设置它。)
编辑:
我正在查看Dapper的SqlMapper源代码并找到:
private static IEnumerable<T> QueryInternal<T>(params) // my knowledge of generics is limited, but how does this work without a where T : object?
{
...
while (reader.Read())
{
yield return (T)func(reader);
}
...
}
所以在找到这个之后我学到了两件事。阅读Func并阅读yield(之前从未使用过)。我的猜测是我需要将reader.Read()传递给另一个函数(检查列标题并适当地插入对象)并返回那个?
答案 0 :(得分:2)
您可以更改select语句以使用"SELECT [Column("GBBRSH")] AS Gibberish"
之类的别名,并提供属性名称和poco属性名称之间的映射。
这样,Dapper
将填充匹配的属性,因为它只需要您的POCO匹配列的确切名称。