2012-11-15 36 views
4

我必須做很多實體的批量插入,所以我想最好的方法是使用SqlBulkCopy類。但是,該類運行於DataReader實例,而我的代碼與IEnumerable一起工作,其中T是我的實體類。要將我的IEnumerable轉換爲DataReader,我找到了以下代碼:LINQ Entity Data ReaderLINQ實體數據讀取器不支持枚舉

此代碼工作正常,但有一個問題:我的實體類型的枚舉屬性不包含在數據讀取器中(因此未正確插入)。我如何可以識別枚舉類型屬性?

回答

3

我發現這是由於IsScalarType方法沒有考慮到枚舉。

private static bool IsScalarType(Type t) 
{ 
    // The || t.IsEnum part is new and makes sure that enums are recognized 
    return scalarTypes.Contains(t) || t.IsEnum; 
} 

後這個修改枚舉類型也將認識到:這可以很容易通過修改IsScalarType方法如下進行固定。

+0

爲什麼不只是用't.IsValueType'替換'IsScalarType'的所有實例,其中't'是要檢查的類型? – Trisped

+0

結構是值類型。結構!=標量。 – jnm2

+0

這很好,但還不夠,因爲它不會將可枚舉枚舉類型作爲標量類型來確認。我做了一些代碼來解決這個問題,但是在批量插入時它仍然會失敗。我仍在調查。 – Crono