2011-05-24 62 views
0

您可以使用global :: Namespace將ENUM數據類型附加到Linq2SQL中的sqlserver-table-field並指定它的服務器數據類型。Linq2SQL無法從表字段中讀取空值,因爲ENUM

我已經刪除了一個表和一個ENUM之前的關係。 在Linq2Sql DataContext中,類型被設置爲global :: Namespace,NULLable = True及其相應的服務器數據類型(small int)。

爲什麼我得到的是有這個值爲null

InvalidOperationException 
The null value cannot be assigned to a member with type 
<Namespace> which is a non-nullable value type. 

..when裝載行?

+0

看來是一個值類型,如果你想給它賦值Null,就加上「?」運算符聲明枚舉類型:類似EnumDataType? SQL服務器場。 – MBen 2011-05-24 09:31:19

+0

謝謝。那將是容易的部分。雖然,這是由Linq2Sql工具完成的,它似乎是從數據庫中讀取一個空值時感到困惑。 – Independent 2011-05-24 09:44:58

+0

不是很熟悉Linq2Sql,但是有沒有自動生成的代碼? – MBen 2011-05-24 09:54:24

回答

0

如何簡單地打開生成的代碼並添加'?'到相應的聲明?我知道你前一段時間必須做類似的事情,以確保Guid字段能得到db生成的值。 (它支持它,但Linq2Sql沒有正確添加該參數..)

我完全同意你的看法,這是不推薦的。但是,如果您看不到其他解決方案而不是更改生成的代碼,那麼我強烈建議您在某處清楚地記錄它,而不是在生成的代碼中。我沒有參加上面提到的項目,幾個月後,我不得不在數據庫中更換新版本。當然,我沒有考慮到當時對自動生成的代碼所做的更改並重新生成了代碼,導致了相當多的錯誤,這對我來說有點混亂,因爲我沒有記住自己已經改變了什麼早些時候..好時光,好時光! :o)

0

我試圖提倡一位評論者撰寫答案。

這個問題是通過在自動生成的代碼中查找/替換來解決的。這是不推薦的,所有更改都可以替換,只需按下ORM工具中的保存(如果它不支持更改)即可。

在這種情況下,您可能可以解決它在ORM設計器內的數據類型之後附加問號。這意味着global::Namespace.ClassName.EnumName將是global::Namespace.ClassName.EnumName?,就像一個可空的int int?。其他屬性當然必須照常。

同樣值得一提的是恢復到上面(讀取空值);如果數據類型保存空值,則枚舉需要處理NULL。