entity framework:将tinyint映射到布尔值

默认情况下,Entity Framework将tinyint映射到byte。

我尝试将生成后的基础类型更改为布尔值,但是出现编译错误

指定的成员映射无效。 成员的类型’Edm.Boolean [Nullable = False,DefaultValue =]’…

这可能在4.0?

我不打算将tinyint列用作布尔值。 这是由另一个使用hibernate的团队自动完成的,显然这样做是为了兼容mysql。 很明显,tinyint的值大于2.我正在寻找一种方法来映射它,以便任何接受1都是假的,或者任何接受为0都是真的。 要不会对我有用

有没有办法将各种类型的翻译器插入EF?

从MSDN的整数类型页面,我们看到tinyint类型表示一个0到255之间的整数。

相反, bool仅表示二进制01

将默认映射从byte更改为bool (如果它甚至可能,根据此页面看起来似乎不是这样)没有意义 – 例如,您将如何将值42 (有效的tinyint )表示为bool

如果你需要一个具有bool类型属性的实体,我建议将它映射到bit类型的列。

实际上,数据库中经常使用整数的主要原因是由于许多数据库引擎不允许在位字段上使用索引。 大多数数据库引擎尝试将一个“内部”字节中的多个位字段分组到安全空间。 结果,位字段实际上不可用于索引。

事实上的标准是0等于false,所有其他值等于true。 但是,EF不支持这种映射。 最好的方法是使用声明为byte的私有阴影字段,映射到EF。 其次,您创建一个别名布尔属性,您的代码使用该属性。

使用EF映射私有属性需要一些reflection代码。