2010-10-25 50 views
8

實體框架將tinyint映射到字節。實體框架:默認情況下,將tinyint映射到布爾值

我試圖改變底層類型它被生成到布爾之後,但得到編譯錯誤指定

會員映射無效。類型「Edm.Boolean [可空=假,默認值=」構件嗒嗒...

這可能在4.0?

這不是我的想法使用tinyint列作爲布爾值。這是由另一個使用hibernate的團隊自動完成的,顯然這是爲了兼容mysql。顯然tinyint有更多的值比2.我正在尋找一種方法來映射它,以便任何接受1爲假,或任何接受0爲真。要麼爲我工作

有沒有辦法將類型轉換器插入到EF?

回答

3

從MSDN頁面上integer types,我們看到tinyint類型代表整數範圍從0到255

一個bool,相比之下,僅表示二進制01

更改默認的映射從bytebool(如果它甚至有可能,它根據this page好像它不是)沒有任何意義 - 如何,例如,將你所代表的價值42(有效tinyint )作爲bool

如果你需要一個屬性類型爲bool的實體,我建議將它映射到bit類型的列。

+0

同意。我討厭使用小整數來表示布爾值。顯然這是在java中使用hibernate完成的,並且爲mysql兼容性創建了一個tinyint字段。 – 2010-10-25 17:32:36

+3

在早期語言中,除0之外的任何值都被視爲true,0被視爲false ...因此它們部分歸咎於:) – Dismissile 2010-10-25 17:47:58

+3

恰恰相反,它的確有很多的意義!如果你不能改變數據庫模式(無論出於什麼原因),那麼你沒有別的選擇,只能調整映射。除非你想用布爾型語義將一個屬性公開爲一個整數,這很醜陋。 – proskor 2013-05-02 10:25:52

4

實際上,爲什麼經常在數據庫中使用整數的主要原因是由於許多數據庫引擎不允許在位域上進行索引。大多數數據庫引擎都試圖將多個位字段在一個「內部」字節中分組到安全空間。因此,位字段並不真正可用於索引。

事實上的標準是0等於假,其他所有值等於真。但EF不支持這種映射。最好的方法是使用聲明爲映射到EF的字節的私有陰影字段。其次,您創建了代碼使用的別名布爾屬性。

使用EF映射私有屬性需要一些反射代碼。