2013-05-01 126 views
1

所以我有這樣的屬性的類:與數據註釋Dapper.NET映射

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默認不使用的映射,但我確實希望以這種方式進行設置)。

編輯:

我期待在小巧玲瓏的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()傳遞給另一個函數(該函數檢查列頭並適當地插入到對象中)並返回那個?

+0

您可以將您的select語句更改爲「SELECT [Column(」GBBRSH「)] AS Gibberish」並提供屬性名稱和poco屬性名稱之間的映射。那樣,小巧玲瓏就會填充匹配的屬性。 Dapper要求您的POCO匹配列的確切名稱。 – Alex 2013-05-02 09:07:46

+0

我確實喜歡這個建議。我會嘗試一下(看不出它不會起作用)。你想將你的評論轉換爲答案嗎?我會將其標記爲答案,因爲這或多或少是我正在尋找的答案。 – Robert 2013-05-02 13:17:29

回答

2

您可以將您的select語句更改爲使用別名"SELECT [Column("GBBRSH")] AS Gibberish",並提供屬性名稱和poco屬性名稱之間的映射。

這樣,Dapper將填充匹配的屬性,因爲它只需要您的POCO匹配列的確切名稱。