关于MVC 中EF调用存储过程

Entity Framework 4.3 中使用存储过程

尽管 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();      

        }    

}

posted @ 2013-11-04 23:22  酒沉吟  阅读(4708)  评论(2编辑  收藏  举报