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();
}
}
Entity Framework 4.3 中使用存储过程的更多相关文章
- 在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
[原文地址]Using Repository and Unit of Work patterns with Entity Framework 4.0 [原文发表日期] 16 June 09 04:08 ...
- Entity Framework在WCF中序列化的问题
问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...
- Entity Framework在WCF中序列化的问题(转)
问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...
- Entity Framework 在MySQL中执行SQL语句,关于参数问题
在Entity Framework中添加MySQL模型,在写代码的过程中需要直接执行SQL语句. 在SQL语句中用到了@curRank := 0 这样在SQL语句中定义参数,同时还会有传入参数:ai. ...
- Entity Framework 学习中级篇2—存储过程(上)
目前,EF对存储过程的支持并不完善.存在以下问题: l EF不支持存储过程返回多表联合查询的结果集. l EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...
- Entity Framework 学习中级篇3—存储过程(中)
目前,EF对存储过程的支持并不完善.存在以下问题: l EF不支持存储过程返回多表联合查询的结果集. l EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...
- Entity Framework Code First 中使用 Fluent API 笔记。
在做MVC+EF CodeFirst 的Demo时,碰到的问题, 在组册用户时,要让用户输入确认密码,但是数据库中又不需要保存这个字段,解决方案很多了,这里我列出通过EF Code First的解决方 ...
- Entity Framework 学习中级篇4—存储过程(下)
在EF中,各个实体的插入.更新和删除也都通过使用存储过程来完成,以便提高点性能.这个类似于数据集.其步骤是:先定义存储过程,然后在VS的可视化设计器,设置存储过程映射即可. 下面,以为Supplier ...
- EF Entity Framework Core DBContext中文文档
Add(Object) 以添加状态开始跟踪给定的实体和任何其他尚未被跟踪的可访问实体,以便在调用SaveChanges()时将它们插入数据库.使用State设置单个实体的状态. Add<TEnt ...
随机推荐
- 解决idea控制台打印乱码问题
idea控制台打印乱码,用起来总别扭,也是在网上搜索了一番,靠一点猜测解决了. 首先打开你自己的idea的安装目录下(即右键桌面图标,点击打开文件所在位置),然后找到idea.exe.vmoption ...
- 安装charles
简介: Charles主要的功能包括: 支持SSL代理.可以截取分析SSL的请求. 支持流量控制.可以模拟慢速网络以及等待时间(latency)较长的请求. 支持AJAX调试.可以自动将json或xm ...
- 洛谷 2048 BZOJ 2006 [NOI2010]超级钢琴
[题解] 贪心题.设五元组(mx,pos,l,r1,r2)表示最大值为mx,取得最大值的区间右端点为pos,区间左端点为l,区间右端点的可选区间为[r1,r2]. 每次从堆里拎出最大值,然后把这个区间 ...
- Git--删除远程仓库文件但不删除本地仓库资源
我们在使用idea开发的过程中经常会出现新建项目的时候直接把xxx.iml文件也添加到了git trace 当然这并不会出现什么问题,问题是当我们把xxx.iml文件push到我们github上之后, ...
- 【Codeforces 369C】 Valera and Elections
[链接] 我是链接,点我呀:) [题意] 给你一棵树 让你选择若干个修理点. 这些修理点被选中之后,节点i到1号节点之间的所有"坏路"都会被修好 问最少需要选择多少个点才能将所有的 ...
- https://blog.csdn.net/zhi_sheng/article/details/78910082----mybatis写当天 当月的数据 时间段数据
https://blog.csdn.net/zhi_sheng/article/details/78910082---- mybatis写当天 当月的数据 时间段数据
- MVC系统学习2—MVC路由
在MVC下不是通过对物理文件的映射来实行访问的,而是通过定义后的路由Url来实现访问的.在前一篇讲到我们是在全局文件下进行路由配置. routes.MapRoute( & ...
- python整数转ASCII码
# *-* coding:utf-8 *-* import binascii data = [1441465642, 251096121, -870437532, -944322827, 647240 ...
- noip模拟赛 都市
分析:是一道非常有意思的题,30分的暴力的话枚举每个位置是什么数,然后排个序,用map判一下重就好了,比较麻烦. 满分做法显然不可能讨论每个位置所有的情况,肯定是有规律的,现将这n*(n-1)/2个数 ...
- OpenJudge百炼习题解答(C++)--题2704:竞赛评分
题: 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 现举行一次小竞赛,參赛的3支队伍,编号为1,2,3.每支队列轮流回答问题,假设回答正确,加10分;回答错误,扣10分;放弃 ...