【发布时间】:2017-11-25 08:36:44
【问题描述】:
我有一个 MySQL 存储过程,从名为 tuser 的特定表中选择数据。
我使用的是EntityFramework6,所以我将过程的结果定义为tuser的实体。
当我在 C# 代码中使用该过程时,抛出以下异常:
“tuser”上的“bIsActive”属性无法设置为“System.Decimal”值。您必须将此属性设置为“System.Boolean”类型的非空值。
我无法理解我想要执行的操作与引发的异常之间的联系。
数据库中的表定义:
CREATE TABLE `tuser` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sUserName` varchar(45) DEFAULT NULL,
`sUserNameMail` varchar(45) DEFAULT NULL,
`sMail` varchar(45) DEFAULT NULL,
`bIsActive` bit(1) DEFAULT b'1')
ENGINE=InnoDB AUTO_INCREMENT=2225 DEFAULT CHARSET=utf8;
ef中的bIsActive定义:
存储过程定义:
CREATE DEFINER=``@`` PROCEDURE `GetActiveUsers`()
BEGIN
select u.* from tuser u
where u.bIsActive=true;
END
执行以下代码行时发生错误:
List<tuser> list = Context.GetActiveUsers().ToList();
内部 GetActiveUsers 代码(自动生成):
public virtual ObjectResult<tuser> GetActiveUsers()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<tuser>("GetActiveUsers");
}
【问题讨论】:
-
看起来你有一个布尔值并且你试图将它设置为十进制? tuser.blsActive 是布尔值,而不是小数。
-
显示在
tuser中将blsActive分配为bool属性的任何代码。 -
“这就是重点”——那为什么不在问题中呢? 请在问题中包含所有相关信息。您能否发布一个演示该问题的存储过程的简短示例? (它不需要是真正的 SP - 只需一个表现出相同行为的 SP。)
-
select * from tuser where bIsActive=true是一个错误的分配。试试select * from tuser where bIsActive=1。 -
@Ariela:我并不是建议在代码中使用查询。我只是想帮你诊断出了什么问题。如果查询有效而存储过程无效,则需要查看数据库返回的内容有何不同。
标签: c# mysql entity-framework stored-procedures