2011-08-03 30 views
3

由于未知原因,我正面临此问题,并且我尝试了每个论坛和博客来解决此问题,但无法得到任何满意的答案。'yyy'上的xx'属性不能设置为'String'值。您必须将此属性设置为类型为'Int32'的非空值

让我来描述一下这个场景。

我在数据库中有一个视图,它包含两个表中的列。没有一个表的数据类型为“int”,因此得到的视图(我们的名字是“MyRecord”)也没有任何具有“int”数据类型的列。视图中的所有列都将varchar作为数据类型。

现在,在我的.edmx中,我添加了这个视图,并创建了模型(名称为“MyRecord”),所有属性都使用数据类型“String”创建。我正在使用Silverlight和RIA服务,在建立应用程序之后,相关的代理也可以很好地创建而不会造成任何困难。

当我尝试使用我的域上下文来查询“MyRecord”时,出现以下错误。

查询'GetMyRecords'的加载操作失败。 “MyRecord”上的'CenterCode'属性不能设置为'String'值。您必须将此属性设置为“Int32”类型的非空值。

从错误中可以看出,显然迫使我将“字符串”列“CenterCode”的数据类型转换为“Int32”,这对我来说是完全无用的和不必要的。 “String”或“varchar”列存在是因为它们具有一些业务重要性,将它们更改为“Int32”或“int”可能会在将来破坏应用程序。它的确如此,“CenterCode”列中只有数字数据,但将来可能会有字符数据,这就是为什么它使用'varchar'数据类型创建的原因。

因为EF不支持,我无法更改我的数据类型。

我使用了sql server profiler,查询正在执行正确,我可以在SSMS中运行相同的查询而没有任何错误。只有当EF从查询返回的数据构建对象时,该错误才会出现在应用程序中。

我不明白为什么Entity Framework会抛出这个错误,它根本就不会将“varchar”转换为“String”,并且不必要地将“Int32”带入图片并使生活变得困难。自从最近4小时以来,我一直在努力解决这个问题,并尽了一切可能的办法来解决这个问题,但一切都是依靠的。

请提供一些信息或解决方案,如果任何人有。

英孚团队,您必须对此问题有一些答案或解决此问题。

回答

1

不知道你是否解决了这个问题,但是我在使用EF处理多个结果集时遇到了类似这样的问题。在我的情况下,我有reader.NextResult(),这对我造成了一个问题,因为我没有读取以前结果中的所有记录,并且我认为EF由于试图将数据从第二个结果集映射到第一个对象而失败。

2

我与double数据类型有同样的问题。

解决方案

更改您的视图/程序和转换列,如:cast(columnname as int32)

+3

我想知道,即使这个工程,它是如何有意义?从我所了解的问题开启者说他的表不包含任何int数据类型,并应该都是varchar。为什么要铸造为int32需要?或者说,如果没有任何字段是整数,EF为什么试图将int纳入方程?我有同样的问题,但也有双倍的问题,我试图弄清楚发生了什么事情。 – dtc

1

CAST(columnName as Type)解决我的存储过程中的问题。

相关问题