【问题标题】:The specified cast from a materialized 'System.Int32' type to the 'System.String' type is not valid从具体化的“System.Int32”类型到“System.String”类型的指定转换无效
【发布时间】:2014-03-13 20:50:56
【问题描述】:

我正在使用实体框架 6.0.2;在开始出现此错误之前,我使用的是以前的版本。

基本上,我使用“字符串”属性设置我的模型并执行查询或存储过程并将结果作为字符串转储,这一直有效。

任何想法如何解决?也许我可以使用“约定”进行转换?

例如:

SQL:
select ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id, '0', 'Test0', 'some kind of data', 'Test1', 'possibly a datetime type', 'Test2'

C#:
public class SomeModel
{
    public int Id { get; set; }
    public string Test0 { get; set; }
    public string Test1 { get; set; }
    public string Test2 { get; set; }
}

Invalid Operation Exception:
var records = dbContext.Database.SqlQuery<SomeModel>("select ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id, '0', 'Test0', 'some kind of data', 'Test1', 'possibly a datetime type', 'Test2'").ToList();    

.

【问题讨论】:

  • 我不禁要问,为什么你的模型以字符串属性开头???
  • 数据仅供展示。我只是想把它扔掉。
  • 如果要显示值,请在 UI 级别使用格式设置。不要让您的模型符合您的显示要求,恕我直言,这是错误的。
  • 我想您可以创建视图并将其中的字段值转换为 varchars,然后让您的模型指向这些视图。
  • 您是否将字符串传递给int Id

标签: c# sql entity-framework


【解决方案1】:

即使这是一岁没有答案。根据上面@Crono 的评论,我有自己的答案要提供。

基本上,问题在于数据类型。为了将 SQL 结果集绑定到模型,实体框架必须将数据类型从 SQL 转换为 .NET。

嗯,在 .NET 中,我希望将所有内容都作为字符串返回,因为要检索的数据根本不是对其进行操作,而是将其显示到网页或文件中。

需要更新查询以将所有结果列转换为 varchar。 @Crono 在上面的评论中很好地解释了这一点。视图对我不起作用,因为数据/结果未知。

编辑 2016 年 7 月 2 日

铸就你的价值观!

select Cast(ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id as int), Cast('0' as varchar(255)), Cast('Test0' as varchar(255)), Cast('some kind of data' as varchar(255)), Cast('Test1' as varchar(255)), Cast('possibly a datetime type' as varchar(255)), Cast('Test2' as varchar(255))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多