我正在使用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();
答案 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))