Entity Framework 4.3 中使用存储过程

分类:ASP.NET MVC 3, ASP.NET        

         0         

        

尽管 Entity Framework 4.3 都已经发布了,且表示在 EF 5 中性能将会有很大提升.但很多存储过程控,始终不会放弃使用存储过程,那今天就让我们看看在 EF 4.3 中怎么使用存储过程.

我们接着上篇文章,在 Sql Server 2008 中创建一个简单的存储过程,如下:

CREATE PROCEDURE [dbo].[P_GetArticleByID]          @IDint AS BEGIN         SELECT ID,Title FROM Articles         WHERE ID=@ID;END

查询存储过程在 Controller 中的写法:

BlogContext db =newBlogContext();
SqlParameter[] parms =newSqlParameter[1];
parms[0]=newSqlParameter("@ID",1);
var result = db.Articles.SqlQuery("exec P_GetArticleByID @ID", parms);
returnView(result);

可见,我们通过执行 Sql 语句的方法来使用存储过程.增、删、改方法:

int result = db.Database.ExecuteSqlCommand("exec P_DeleteArticleByID @ID", parms);

本篇简单给出在 EF 4.3 中使用存储过程的方法,希望对大家有所帮助.

 

说明:针对 entityframework 4.0 中添加存储过程和的调用方法

一.新建存储过程

USE [Tester] GO /****** Object:  StoredProcedure [dbo].[GetUserInfoByUserName]    Script Date: 05/11/2011 18:17:13

******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

--create PROCEDURE [dbo].[UserMg_GetUserInfo] -- 新建

--alter PROCEDURE [dbo].[UserMg_GetUserInfo]  -- 修改

@userId char(50)     as     set nocount on

begin

declare   @sqlstr   varchar(2000);

set @sqlstr='         select *   from Customer a   where a.u_id='+@userId+'   union all   select *   from Customer b   where b.u_id='+@userId+'        '

exec(@sqlstr)     end

二.VS 中导入存储过程

1.双击项目中的 .edmx 文件,打开模型编辑窗口

2.在空白处右击,选择“模型浏览器”

3.展开“模型名.Store” 节点,并右击选择“从数据库更新模型”

4.在打开的更新向导中选择“添加”选项卡,展开“存储过程”节点,勾选要添加的过程名称,点击完成

5.右击新添加的存储过程名称,选择“添加函数导入”

6.在弹出的“添加函数导入”窗口中,输入“函数导入名称”并选择该函数对应的“存储过程名称”

7.如果存储过程有返回值的话需要在 “返回以下内容的集合”指定数据类型,并创建接受数据的实体对象

7.1 如果返回值为一个数值,则选择标量,并选择标量类型

7.2 如果返回的是多列的数据集,则选择“复杂类型”      (注:在“存储过程列信息”中点击“获取列信息”按钮,

可以获取到存储过程的返回的结果集中各个列的类型,

特别声明:该获取的类信息取决于存储过程最后一个 select 语句       )

7.3 点击“创建信息的复杂类型”按钮后,可以在“模型浏览器”的“复杂类型”节点下看到刚刚新建

的复杂类型了(负载类型的命名规则为:导入函数名称_Result)

8.点击“确定”按钮后,可以在“模型浏览器”的“函数导入”节点下看到刚刚新导入的函数了

9.到此已经成功的在该数据模型中添加一个存储过程的调用方法了

三.调用示例(只是语法调用的演示)

/// <summary>

/// 调用 UserMg_GetUserInfo 存储过程获取信息

/// </summary>

/// <param name="userId">用户ID</param>

/// <returns></returns>

public static List<Customer> UserMg_GetUserInfo(string userId)

{

using (T.DataAccess.TesterEntities ent = new DataAccess.TesterEntities())

{        ObjectParameter par = new ObjectParameter("userId", typeof(string));

ObjectResult<Customer> result = ent.UserMg_GetUserInfo(userId);

if (result == null)           return null;

return result.ToList();

}

}

关于MVC 中EF调用存储过程的更多相关文章

  1. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

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

    EF调用存储过程.函数 2014-04-02 09:12:20|  分类: ORM框架|举报|字号 订阅          一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...

  3. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...

  4. asp.net中怎样调用存储过程和存储过程的写法(转载,留着自己看)

    asp.net中怎样调用存储过程和存储过程的写法 创建一个只有输入参数的存储过程 create procedure proc_user@name varchar(20),@Password varch ...

  5. [LinqPad妙用]-在Net MVC中反射调用LinqPad中的Dump函数

    LinqPad有个非常强大的Dump函数.这篇讲解一下如何将Dump函数应用在.Net MVC Web开发中. 先看效果: 一.用.Net Reflector反编译LinqPad.exe,找出Dump ...

  6. EF调用存储过程、函数

    一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题 说这个问题前 首先先说下 我使用ef4.1 codefirst的目的. 是因为可 ...

  7. asp.net中C#调用存储过程

    创建存储过程: create procedure houseCount ( ), @house_count int output ) as select @house_count=COUNT(*) f ...

  8. .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示

    直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路 1.view页面 <link href="~/Content/bootstrap.css" ...

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

    实现功能:查询单张表Student中返回指定的列 一:数据库表结构: 二:存储过程: USE [AdventureWorksDW] GO /****** Object: StoredProcedure ...

随机推荐

  1. js 函数递归优化,arguments.callee 优化

    函数递归是个经典的问题,平常用的时候,小练习可以通过函数名来反复调用,比如: function factorial(num) { if (num <= 1) { return 1; } else ...

  2. [Gradle] 如何强制 Gradle 重新下载项目的依赖库

    强制刷新 Gradle 依赖库缓存 $ gradle build --refresh-dependencies The --refresh-dependencies option tells Grad ...

  3. 06.Curator Barrier

        分布式Barrier是这样一个类: 它会阻塞所有节点上的等待进程,知道某一个被满足, 然后所有的节点继续进行.     比如赛马比赛中, 等赛马陆续来到起跑线前. 一声令下,所有的赛马都飞奔而 ...

  4. hibernate的.hbm.xml文件文件配置属性详解

    一般.hbm.xml文件如下面: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "- ...

  5. 前端开发 - JQuery&Bootstrap - 总结

    一.JavaScript和Jquery的区别 1.javascript的缺点: 1.书写繁琐,代码量大 2.代码复杂 3.动画效果,很难实现.使用定时器 各种操作和处理 2.定义: 1.Javascr ...

  6. 如何实现手游app瘦身?

    手游服务商来说,手游包体大一直是个很困扰的问题.一款手游产品而言,包体大小和更新方式对于有效用户的转化率往往起到非常关键的作用,话说手游安装包越小,用户转化率越高,那该如何实现app瘦身呢? 工具/原 ...

  7. Androidstudio中导入内部依赖模块总结

    今天刚从GitHub上找了一个不错的项目,想要把它导入自己的项目中,过程中也遇到了一些小问题,总结一下,以便复习回顾!!!! 1.首先将从GitHub上下载的压缩包进行解压,找到其中的项目文件,直接复 ...

  8. Python用MySQLdb, pymssql 模块通过sshtunnel连接远程数据库

    转载自 https://www.cnblogs.com/luyingfeng/p/6386093.html 安全起见,数据库的访问多半是要做限制的,所以就有一个直接的问题是,往往多数时候,在别的机器上 ...

  9. Linux命令(1)——xargs命令

    1.功能: xargs能够将stdin中以空格或换行符进行分隔的数据.形成以空格分隔的參数(arguments),传递给其它命令.由于以空格作为分隔符,所以有一些文件名称或者其它意义的名词内含有空格的 ...

  10. SQL事务回滚 写法(转)

    以下是SQL 回滚的语句:方案一:SET   XACT_ABORT   ON--如果产生错误自动回滚GOBEGIN   TRANINSERT   INTO   A   VALUES   (4)INSE ...