1

所以我有一个具有这样属性的类:

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 并阅读产量(以前从未使用过)。我的猜测是我需要将 reader.Read() 传递给另一个函数(检查列标题并适当地插入对象)并产生返回?

4

1 回答 1

2

您可以更改您的 select 语句以使用别名,"SELECT [Column("GBBRSH")] AS Gibberish"并提供属性名称和 poco 属性名称之间的映射。

这样,Dapper将填充匹配的属性,因为它只需要你的 POCO 来匹配列的确切名称。

于 2013-05-02T13:42:55.620 回答