2009-09-18 59 views
13

我剛開始學習一些關於實體框架的知識,並且沒有太多關於ORM的經驗。在實體框架中將模型屬性設置爲布爾值

在我的小應用程序中,我有一個表,這個SQL服務器表有幾個列,包括一個PrimaryKey(int)一個名稱(字符串)和一個標誌(tinyint)。

當我將這個表導入它時,自動將Flags的數據類型賦值爲一個字節。這是好的,但旗真的應該是一個布爾值,因此我

  1. 點擊的映射詳細信息
  2. 選擇自己的旗幟財產
  3. 改變從字節類型爲Boolean
  4. 重建應用

然後我得到這個錯誤:

Error 2019: Member Mapping specified is not valid. The type 'Edm.Boolean[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.MyItem' is not compatible with 'SqlServer.tinyint[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.Store.MyItem'.

有沒有辦法有

MyItem item = new MyItem(); 
item.Flag = true; 

並且在數據庫中有Flag保存爲1?

+0

爲什麼你會需要而不是布爾? – 2015-02-28 11:24:04

+0

@JonasStensved問題在於我使用的數據庫表中有不正確的數據類型。一旦我改變了表格來使用「位」而不是「字節」,那麼一切都很完美。 – 2015-03-02 14:18:07

回答

16

你可以在數據庫中的MyFlag的數據類型更改爲bit

+1

謝謝,位肯定是在這種情況下使用的正確的數據類型 – 2009-09-18 18:19:08

+0

如果我使用View,該怎麼辦? – 2012-02-09 19:20:54

+0

@布魯諾你是什麼意思? – 2012-06-12 23:40:52

2

我認爲對於tinyint,你將不得不做一個部分類,並使用一個單獨的字段,適當地讀/寫該字段。但是,該框架將正確解釋bit字段爲boolean

你可以嘗試像下面的部分..

public partial class MyItem 
{ 
    public bool FlagBool 
    { 
     get { return Flag == 1; } 
     set { Flag = value ? 1 : 0; } 
    } 
} 
+0

謝謝,你是完全正確的,我應該用位代替。 – 2009-09-18 18:20:01

+0

沒問題,以前經歷過。 – 2009-09-18 18:21:43

相關問題