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

            }    

    }

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/chenqingbin/p/11051197.html
Copyright © 2011-2022 走看看