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 ...
随机推荐
- 每日命令:(11)nl
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...
- atCoder Ants on a Circle(又是蚂蚁问题。。。)
atCoder Ants on a Circle(又是蚂蚁问题...) 传送门 题意:一个圈,蚂蚁在上面以相同的速度和不同的方向走,问t秒后它们各自的位置. 解法:和经典的蚂蚁问题一致,把相撞的情况看 ...
- 1031. Hello World for U
Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. ...
- springcloud(九):熔断器Hystrix和Feign的应用案例
因为 feign 中已经支持了 Hystrix ,所以在 Feign 中使用 Hystrix 时,不需要导包,也不需要在入口类上面增加额外的注解: Feign 虽然支持了 Hystrix ,但是默认 ...
- 【19】AngularJS 应用
AngularJS 应用 现在是时候创建一个真正的 AngularJS 单页 Web 应用(single page web application,SPA)了. AngularJS 应用实例 现在可以 ...
- Tensorflow word2vec+manage experiments
Lecture note 5: word2vec + manage experiments Word2vec Most of you are probably already familiar wit ...
- Linux下Ubuntu 操作系统 部署
1.1 先更新系统 环境 更新命令为: apt-get update 1.2 安装jdk 安装JDK命令为:sudo apt-get install o penjdk-7-jdk 1.3 安装tomc ...
- Eclipse创建Maven多模块工程
一.创建父项目 [New]->[Maven Project] 在弹出界面中选择[Create a simple project...] 二.创建子项目 选中刚建的父项目,在弹出菜单中点击[New ...
- 基于.NET平台常用的框架整理(转)
基于.NET平台常用的框架整理 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问 ...
- Windows下Redis的安装与部署
1.下载地址:https://github.com/MSOpenTech/redis/releases 2.下载zip的包,下载后放到需要安装的目录进行解压操作,列如:F:\Redis\Redis-x ...