关于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();
}
}
关于MVC 中EF调用存储过程的更多相关文章
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- 转:EF调用存储过程、函数
EF调用存储过程.函数 2014-04-02 09:12:20| 分类: ORM框架|举报|字号 订阅 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...
- 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand 和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...
- asp.net中怎样调用存储过程和存储过程的写法(转载,留着自己看)
asp.net中怎样调用存储过程和存储过程的写法 创建一个只有输入参数的存储过程 create procedure proc_user@name varchar(20),@Password varch ...
- [LinqPad妙用]-在Net MVC中反射调用LinqPad中的Dump函数
LinqPad有个非常强大的Dump函数.这篇讲解一下如何将Dump函数应用在.Net MVC Web开发中. 先看效果: 一.用.Net Reflector反编译LinqPad.exe,找出Dump ...
- EF调用存储过程、函数
一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题 说这个问题前 首先先说下 我使用ef4.1 codefirst的目的. 是因为可 ...
- asp.net中C#调用存储过程
创建存储过程: create procedure houseCount ( ), @house_count int output ) as select @house_count=COUNT(*) f ...
- .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示
直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路 1.view页面 <link href="~/Content/bootstrap.css" ...
- EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。
实现功能:查询单张表Student中返回指定的列 一:数据库表结构: 二:存储过程: USE [AdventureWorksDW] GO /****** Object: StoredProcedure ...
随机推荐
- 透过Nim游戏浅谈博弈
452. Nim游戏! ★ 输入文件:nim!.in 输出文件:nim!.out 简单对比时间限制:1 s 内存限制:128 MB 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是 ...
- python真值表
author:headsen chen date :2018-06-01 10:53:39 notice:not allowed to copy or you will count law que ...
- MAC OSX安装多个版本的JAVA(jdk jre通用)
MAC自带的jdk1.6是苹果公司自己修改的jdk版本,被广泛应用于各种mac软件,具有不可替代性:同时,java1.7和1.8有时也需要用到.因此,在mac上安装.使用多个版本的java具有重要意义 ...
- js 闭包与垃圾回收-待删
关于闭包请看戳 串讲-解释篇:作用域,作用域链,执行环境,变量对象,活动对象,闭包,本篇写的不太好: 先摆定义: 函数对象,可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种 ...
- 巨蟒python全栈开发flask15项目开始7
1.连续收取未读消息&&未读消息所属人 2.Pypinyin NLP中文同音字识别 3.jieba分词 4.Gemsim框架之LsiModel稀疏矩阵相似度 5.Gensim的应用 6 ...
- [LeetCode] 1.Two Sum - Swift
1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...
- super()函数的用法
http://www.runoob.com/python/python-func-super.html class FooParent(object): def __init__(self): sel ...
- Spring Data之Hello World
1. 概述 SpringData : 注意目标是使数据库的访问变得方便快捷;支持NoSQL和关系数据存储; 支持NoSQL存储: MongoDB(文档数据库) Neo4j(图形数据库) Redis(键 ...
- python序列化和json
python 的序列化和反序列化用于内存之间的共享,包括服务器和客户端的共享,两个Python程序之间的共享,以及以字符串的形式存储到硬盘中. pyhton 的pickle 可以对Python的各种数 ...
- Python并行编程(四):线程同步之RLock
1.基本概念 如果想让只有拿到锁的线程才能释放该锁,那么应该使用RLock()对象.当需要在类外面保证线程安全,又要在类内使用同样方法的时候RLock()就很使用. RLock叫做Reentrant ...