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