【问题标题】:xx' property on 'yyy could not be set to a 'String' value. You must set this property to a non-null value of type 'Int32''yyy 上的 xx' 属性无法设置为“字符串”值。您必须将此属性设置为“Int32”类型的非空值
【发布时间】:2011-08-03 12:57:26
【问题描述】:

由于未知原因,我遇到了这个问题,我已经尝试了每个论坛和博客来解决这个问题,但没有得到任何满意的答案。

让我描述一下场景。

我在数据库中有一个视图,它由两个表中的列组成。所有表都没有任何数据类型为“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 小时以来,我一直在努力解决这个问题,并尝试了所有可能的方法来解决它,但一切都在脉络中。

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

EF 团队,你必须对这个问题有一些答案或解决这个问题。

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

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

    解决方案

    更改您的视图/程序并将列转换为:cast(columnname as int32)

    【讨论】:

    • 我想知道,即使这可行,它有什么意义?据我了解,问题开启者说他的表不包含任何 int 数据类型,并且应该都是 varchar。为什么需要强制转换为 int32?或者更确切地说,如果所有字段都不是整数,为什么 EF 试图将 int 带入等式?我有同样的问题,但也有双重问题,我正试图弄清楚发生了什么。
    【解决方案2】:

    不确定您是否解决了这个问题,但我在使用 EF 处理多个结果集时遇到了类似的情况。就我而言,reader.NextResult() 给我带来了问题,因为我没有读取上一个结果中的所有记录,并且我认为 EF 失败是因为试图将第二个结果集中的数据映射到第一个对象.

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-18
        • 1970-01-01
        • 2017-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多