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-18
11 -- Description:    返回Student表中指定的字段
12 -- =============================================
13 ALTER PROCEDURE [dbo].[GetAllStudentInfo]
14     @stuName varchar(50)
15 AS
16 BEGIN
17     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 Class1
10     {
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_Result
18             var list = awd.ExecuteFunction<QueryAllStudentInfo_Result>("QueryAllStudentInfo", para).ToList();
19         }
20     }
21 }

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

时间: 2024-11-06 19:51:54

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

转:EF调用存储过程、函数

EF调用存储过程.函数 2014-04-02 09:12:20|  分类: ORM框架|举报|字号 订阅 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题 说这个问题前 首先先说下 我使用ef4.1 codefirst的目的. 是因为可以有更纯净的POCO 不再有EDMX这些东西  而不是真正的用 code first 先有代码 再生成数据库.所以 我虽然使用 的是codefirst 但是本质依然是数据库优先. 所以这个被问的

EF 调用存储过程、返回多结果集和OUTPUT参数 等问题

一.EF调用存储过程: 1.执行返回表类型的存储过程 先上存储过程 随手写的一个最简单的   .        Student.  Enrollment,Student   Enrollment.StudentIDStudent.StudentID  Enrollment.StudentID 执行存储过程的方法 是用直接执行sql的方式 我在我的文章第九篇 有过详细的介绍~大家可以先去看下 执行表的存储过程 其实是非常强大的 延迟加载 等都有体现 博客园的陆老师已经写了 写的非常清楚了~我这里就

EF 调用存储过程

EF 调用存储过程直接通过EF 把写好的存储过程 映射到 项目当中 会自动生成 对应存储过程要查询的字段这应该是EF 强大的地方 来一小段代码吧 PracticeEntities context = new PracticeEntities();//EF上下文 var date=context.ProcTest().ToList() ; List < ProcTest_Result > data = date;//ProcTest_Result  EF 帮我们生成的实体类对象

关于EF调用存储过程那点事...

最近研究了下EF怎么调用 数据库的分页存储过程,发现还是很不错的 1.数据库存储过程如下,一个简单的不含条件判断的 2.然后新建数据模型中选择存储过程: : 3.EF会自动生存一个返回复杂类型(ObjectResult)的方法,如下: 4.最后调用此方法: 5.这里值得注意的是,这里有两个输出参数 ObjectParameter(rowCount,pageCount),还有获取返回的数据 result 后一定要toList(),这里涉及到EF的延时查询,如果不toList(),就会得不到 输出参

EF调用存储过程实例

创建实体: 1 public class User 2 { 3 public string UserID { get; set; } 4 public string UserName { get; set; } 5 public string Password { get; set; } 6 [Description("测试")] 7 public string UserGroupId { get; set; } 8 public UserGroup UserGroup { get;

EF调用存储过程

代码下载 1. 新建项目. 新建MVC项目 EFCallSP 2. 新建数据库.添加表,存储过程. a) 在App_Data里面添加数据库MyDataBase. b) 新建表 T1 如下 CREATE TABLE [dbo].[T1] ( [C1] INT NOT NULL PRIMARY KEY, [C2] NVARCHAR(50) NULL ) c) 新建存储过程 SP_Select 如下 CREATE PROCEDURE [dbo].[SP_Select] @p1 int = 0, @p2

c#调用存储过程查询表并返回影响的行数

// 在此处放置用户代码以初始化页面 String DBConnStr; DataSet MyDataSet = new DataSet(); SqlDataAdapter DataAdapter = new SqlDataAdapter(); DBConnStr = "server=192.168.2.120,2433;database=DB_test;uid=sa;pwd=43g"; SqlConnection myConnection = new SqlConnection(DB

EF 调用存储过程实例

IQueryable<TPT_ECN_MSTR> q = db.TPT_ECN_MSTRS.AsNoTracking(); if (_OrdDateFr == DateTime.MinValue && _OrdDateTo == DateTime.MaxValue) return q.Where(p => 1 == 2).ToList(); string usr_user = GetIdentityName(); OracleParameter[] pars = { ne

EF和LINQ 调用存储过程

好久没有更新文章了,最近项目比较忙都没什么时间来分享最近的问题. 今天遇到一个超级傻逼的问题.C#中调用存储过程,自己code也10来年了,这应该是很简单的问题了.今天有2个新的api,一个只有1个参数, 一个有10多个参数,先前没有注意到对象类型, 以为是EF的DbContext,结果后来才发现是LINQ的DataContext对象.以前调用存储过程都是靠设计界面封装成方法. 现在designer界面有500多张表, 几年没有维护了,大家要修改什么东东都是直接改代码.所以这里以后台代码调用存储