'yyy上的xx'属性无法设置为'String'值。您必须将此属性设置为“Int32”类型的非null值

时间:2011-08-03 12:57:27

标签: entity-framework

我因为不明原因而面临这个问题,我已经尝试过每个论坛和博客来解决这个问题,但是没有得到任何满意的答案。

让我来描述一下情景。

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

现在,在我的.edmx中,我添加了这个视图,并且创建了模型(名称为“MyRecord”),并且使用数据类型“String”创建了所有属性。我正在使用带有RIA服务的Silverlight,在构建应用程序之后,相关代理也被创建得很好而没有任何混淆。

当我尝试使用我的域上下文查询“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个小时以来我一直在努力解决这个问题,并尝试了一切可能的方法来解决它,但一切都在静脉中。

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

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

3 个答案:

答案 0 :(得分:2)

我遇到了double数据类型的相同问题。

<强>解决方案

更改您的观看/过程并将列投射为:cast(columnname as int32)

答案 1 :(得分:1)

不确定您是否解决了这个问题,但我在使用EF处理多个结果集时遇到了类似的问题。在我的情况下,我有reader.NextResult()导致我的问题,因为我没有读取前一个结果的所有记录,我认为EF因为尝试将数据从第二个结果集映射到第一个对象。

答案 2 :(得分:1)

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