使用VS 2008,SQL Server 2008和WPF 3.5,我对我的架构进行了一些更改并更新了模型。它编译并运行正常,直到客户端应用程序调用特定实体,我得到以下(实际名称替换):
The data reader is incompatible with the specified '<Model>.<ViewBasedEntity>'. A member of the type, '<Property>', does not have a corresponding column in the data reader with the same name.
我在服务应用中搜索了相关的实体和属性名称,尝试在表格地图中重命名属性,似乎是其他一些报告相同错误的人,但似乎无法及时找到答案....
...有没有人知道如何追踪这一点,如果有的话,是否有一个修复或方法可以遵循以避免将来?
答案 0 :(得分:12)
您也可以更新功能导入:
,而不是更新视图答案 1 :(得分:5)
我遇到了类似的问题,产生了同样的错误信息 - 问题是proc返回的列名包含空格。
创建复杂类型时,[my column]
创建为my_column
。
然后在使用ExecuteStoreQuery
执行proc时,数据阅读器中不存在my_column
,因为proc仍然返回[my column]
。
解决方案:从proc列名称中删除空格,然后为导入的函数重新创建复杂类型。
答案 2 :(得分:4)
好的 - 这是瘦的:
该特定视图设置为存储过程的返回类型,必须在模型的实体容器中设置为函数导入。
我更新了该视图以符合新的报告要求,但没有意识到它对功能导入的重要性。附加字段不是为此目的而识别的数据集的一部分,因此无法找到任何匹配的字段。
所以我复制了视图,并以“报告”为后缀,然后将原始版本恢复为预期的返回字段集。
瞧!
答案 3 :(得分:2)
请查看this博文。查看Divan Moller的第一条评论。可能对你有帮助。
答案 4 :(得分:2)
我见过这种情况发生在改变结果集的数据对象上(例如带有if语句的sproc)错误消息是实体框架工作/数据读取器告诉你它预期列x并且没有返回。< / p>
要解决这个问题,你可以 a)确保您的sproc的所有路径返回相同的列名 b)使用Database.ExecuteSqlCommand
答案 5 :(得分:1)
我最近在使用Sprocs时遇到了同样的问题。我在sproc中有一些conditonal SQL,就像几个'if'语句一样
IF @param1 = 'knownValue'
BEGIN
SELECT * FROM EntityType WHERE ID = 'somevalue'
END
ELSE IF @param1 = 'knownValue2'
BEGIN
SELECT * FROM EntityType WHERE ID = 'somevalue'
END
这是我的EF代码:
return context.Database.SqlQuery<EntityType>(
"[NAV].[GeEntityType] @Date, @ID",
new SqlParameter("Date", paramDate),
new SqlParameter("ID", paramId)).ToList();
我没有提供任何'if'语句都没有返回true的情况,因此sproc甚至没有返回空结果集并导致EF抛出此错误。即使没有返回空读者,在将列映射到属性时,EF也无法匹配。
希望它有所帮助。
答案 6 :(得分:0)
简单方法: