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

Entity framework 在实体框架中将模型属性设置为布尔值,entity-framework,Entity Framework,我刚刚开始学习一点实体框架,对ORM没有太多经验 在我的小应用程序中,我有一个表,这个sql server表有几个列,包括PrimaryKey(int)、Name(string)和Flag(tinyint) 当我将这个表导入时,它会自动将标志的数据类型指定为字节。这很好,但是标志应该是一个布尔值,所以我 单击映射详细信息 已选择我的标志属性 将类型从Byte更改为Boolean 重新生成应用程序 然后我得到了这个错误: 错误:指定了成员映射 无效。类型 'Edm.Boolean[Nullable

我刚刚开始学习一点实体框架,对ORM没有太多经验

在我的小应用程序中,我有一个表,这个sql server表有几个列,包括PrimaryKey(int)、Name(string)和Flag(tinyint)

当我将这个表导入时,它会自动将标志的数据类型指定为字节。这很好,但是标志应该是一个布尔值,所以我

  • 单击映射详细信息
  • 已选择我的标志属性
  • 将类型从Byte更改为Boolean
  • 重新生成应用程序
  • 然后我得到了这个错误:

    错误:指定了成员映射 无效。类型 '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 save设置为数据库中的1?

    我认为对于
    tinyint
    您必须创建一个分部类,并使用一个单独的字段来适当地读取/写入该字段。但是,框架将正确地将
    字段解释为
    布尔值

    您可以尝试下面的方法作为部分

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

    您可以在数据库中将
    MyFlag
    的数据类型更改为
    bit

    谢谢,在这种情况下,bit肯定是正确的数据类型。如果我使用的是视图,该怎么办?如果您首先使用代码(从数据库映射到模型),则@Bruno视图应与表一样使用如果您使用的是EDMX,请尝试花费很长时间来解决此问题,直到我找到此帖子。DB-first-MySQL-linqef6。我将所有的tinyint(1)NOT NULL DEFAULT FALSE更改为位(1)NOT NULL DEFAULT b'0',此时此刻生活是幸福的。这是我以前看到的错误“字符串未被识别为有效的布尔值”。谢谢,你完全正确,我应该使用位来代替。没问题,我以前也经历过。为什么你需要它而不是布尔值?@JonasStensved问题是我使用的数据库表中的数据类型不正确。一旦我将表更改为使用
    而不是
    字节
    ,那么一切都很正常。