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