在实体框架中将模型属性设置为布尔值

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 代替。 没问题,以前经历过。

以上是关于在实体框架中将模型属性设置为布尔值的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能更新核心数据实体属性的布尔值?

如果在配置中将布尔值设置为 true,我如何获得? [关闭]

“将 Tiny 视为布尔值”和实体框架 4

如何在 Go 中将布尔值转换为字符串?

如何在 django admin 中显示布尔属性

如何在 django admin 中显示布尔属性