在实体框架中将模型属性设置为布尔值
Posted
技术标签:
【中文标题】在实体框架中将模型属性设置为布尔值【英文标题】:Set model property to boolean in Entity Framework 【发布时间】:2009-09-18 18:05:30 【问题描述】:我刚刚开始学习一些关于实体框架的知识,对 ORM 没有太多经验。
在我的小应用程序中,我有一个表,这个 sql server 表有几列,包括 PrimaryKey (int)、Name (string) 和 Flag (tinyint)。
当我将此表导入到其中时,会自动将标志的数据类型分配为字节。这很好,但 Flag 应该是一个布尔值,所以我
-
单击映射详细信息
选择了我的标志属性
将类型从字节更改为布尔
重建应用程序
然后我得到了这个错误:
错误 2019:指定了成员映射 无效。方式 'Edm.Boolean[Nullable=True,DefaultValue=]' 类型中的成员“MyFlag” 'MyModel.MyItem' 不兼容 和 'SqlServer.tinyint[Nullable=True,DefaultValue=]' 类型中的成员“MyFlag” 'MyModel.Store.MyItem'。
有没有办法
MyItem item = new MyItem();
item.Flag = true;
并在数据库中将Flag保存为1?
【问题讨论】:
你为什么需要它而不是布尔值? @JonasStensved 问题是我使用的数据库表中的数据类型不正确。一旦我将表格更改为使用bit
而不是byte
,那么一切正常。
【参考方案1】:
您可以在数据库中将MyFlag
的数据类型更改为bit
。
【讨论】:
谢谢,在这种情况下使用 bit 肯定是正确的数据类型 如果我使用的是视图呢? @Bruno 如果您使用的是 Code First(从数据库映射到模型),则应该使用与表相同的视图如果您使用的是 EDMX,请尝试this article 花了很长时间试图解决这个问题,直到我找到了这篇文章。 DB 第一个 mysql Linq EF6。我将所有 tinyint(1) NOT NULL DEFAULT FALSE 更改为 BIT(1) NOT NULL DEFAULT b'0',此刻生活是幸福的。这是我之前看到的错误“字符串未被识别为有效的布尔值。”【参考方案2】:我认为对于tinyint
,您必须创建一个部分类并使用一个单独的字段来适当地读取/写入该字段。然而,框架会将bit
字段正确解释为boolean
。
你可以尝试像下面这样的部分..
public partial class MyItem
public bool FlagBool
get return Flag == 1;
set Flag = value ? 1 : 0;
【讨论】:
谢谢,你完全正确,我应该用 bit 代替。 没问题,以前经历过。以上是关于在实体框架中将模型属性设置为布尔值的主要内容,如果未能解决你的问题,请参考以下文章