来自物化系统.Int32'的指定演员表。输入' System.String'类型无效

时间:2014-03-13 20:50:56

标签: c# sql entity-framework

我正在使用Entity Framework 6.0.2;在我开始收到此错误之前,我使用的是以前的版本。

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

任何想法如何解决?也许是一个"会议"我可以用于转换吗?

前:

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();    

1 个答案:

答案 0 :(得分:4)

即使这是一年没有回答。我有自己的答案提供基于评论@Crono上面说。

基本上,问题是数据类型。为了将SQL结果集绑定到模型,Entity Framework必须将数据类型从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))