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

Posted

技术标签:

【中文标题】“将 Tiny 视为布尔值”和实体框架 4【英文标题】:"Treat Tiny As Boolean" and Entity Framework 4 【发布时间】:2011-10-03 03:30:14 【问题描述】:

我有一种情况,我需要将 mysql 数据库中的 TINYINT 视为数值而不是 TRUE / FALSE。

据我了解,MySQL .Net 连接器用于将 TINYINT 映射为字节。不幸的是,对我来说似乎不再是这种情况,TINYINT 现在映射到布尔值。我需要像以前一样将 TINYINT 转换为字节。我知道连接字符串参数 'Treat Tiny As Boolean=False' 应该可以处理这个问题。由于某种原因,这在使用实体框架时似乎不起作用。有什么想法吗?

【问题讨论】:

您是否尝试过强制 EF 将其视为您想要的类型?这可能包括手动编辑 edmx。我以前必须这样做,但不是使用 MySql。 我确实尝试强制进行无效的更改。我还尝试编辑 edmx;但是,我可能没有在需要更改的地方更改它。我找不到在哪里编辑 edmx 文件以更改数据库中的类型。 【参考方案1】:

使用我所做的研究和 DustinDavis 的评论,我终于能够想出解决问题的方法。诀窍是将“Treat Tiny As Boolean=False”添加到连接字符串中,然后在机器人的“SSDL 内容”部分和“CSDL 内容”部分中编辑 edmx 文件。

在找到“bool”的 SSDL 中,将其替换为“tinyint”,在找到“Boolean”的 CSDL 中将其替换为“SByte”。如果需要,您也可以使用“int”和“Int32”;但是我相信 MySQL 实际上给了你一个“SByte”。在我的情况下,我正在读取通过 Access 前端输入数据库的数据,该前端使用 -1 / 0 表示 True / False。这就是我需要 SByte 的原因。

【讨论】:

多么痛苦。这就是我不再使用EF的原因。等到您更新模型,您将丢失所做的更改。 是的,我想到了。值得庆幸的是,此时找到一个替换选项相当简单。也许我应该选择 NHibernate...

以上是关于“将 Tiny 视为布尔值”和实体框架 4的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架进行连接表搜索?

如何检查任何连接和布尔检查之间的实体框架性能差异?

实体框架中一个或多个实体的可空布尔属性验证失败

动态类型转换实体框架 ORM

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

为啥布尔值比字符消耗更多的内存?