【发布时间】: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