首页 > 代码库 > EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。

EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。

实现功能:查询单张表Student中返回指定的列

一:数据库表结构:

二:存储过程:

 1 USE [AdventureWorksDW] 2 GO 3 /****** Object:  StoredProcedure [dbo].[GetAllStudentInfo]    Script Date: 2014/11/18 21:47:36 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 -- ============================================= 9 -- Author:    王光旭10 -- Create date: 2014-11-1811 -- Description:    返回Student表中指定的字段12 -- =============================================13 ALTER PROCEDURE [dbo].[GetAllStudentInfo]14     @stuName varchar(50)15 AS16 BEGIN17     SET NOCOUNT ON;18     select ID,Name,TID from Student        --注意此处没有查表中的Age字段19 END

三:EF模型更新表和存储过程以及存储过程的函数导入

四:客户端调用

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data.Objects; 6  7 namespace ClassLibrary1 8 { 9     public class Class110     {11         public void accp()12         {13             awdEntities awd = new awdEntities();14             15             ObjectParameter[] para = new ObjectParameter[] 16             { 17                 new ObjectParameter("stuName", "田三")18             };19             //QueryAllStudentInfo为导入存储过程制定的那个函数名称20             var list = awd.ExecuteFunction<Student>("QueryAllStudentInfo", para).ToList();21         }22     }23 }

此时问题就出来了:

解决办法:

此时客户端调用需要更改一下返回的数据类型:

 1 using System.Text; 2 using System.Data.Objects; 3  4 namespace ClassLibrary1 5 { 6     public class Class1 7     { 8         public void accp() 9         {10             awdEntities awd = new awdEntities();11             12             ObjectParameter[] para = new ObjectParameter[] 13             { 14                 new ObjectParameter("stuName", "田三")15             };16             //QueryAllStudentInfo为导入存储过程制定的那个函数名称17             //之前的数据返回类型Student更改为QueryAllStudentInfo_Result18             var list = awd.ExecuteFunction<QueryAllStudentInfo_Result>("QueryAllStudentInfo", para).ToList();19         }20     }21 }

问题就到此解决完毕。希望能帮到大家。

EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。