zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    2015-04-10一些知识点
    2015-04-07一些知识点
    斐波那契数列算法
    进制转换算法
    Java中transient有何作用?
    RandomAccessFile的使用
    Java各种类型占用的字节数
    LineNumberReader类的使用
    PreparedStatement和Statement的区别
    ResultSet几种类型的区别
  • 原文地址:https://www.cnblogs.com/wgx0428/p/4107080.html
Copyright © 2011-2022 走看看