Entity Framework 学习中级篇4—存储过程(下)
在EF中,各个实体的插入、更新和删除也都通过使用存储过程来完成,以便提高点性能。这个类似于数据集。其步骤是:先定义存储过程,然后在VS的可视化设计器,设置存储过程映射即可。
下面,以为Supplier实体映射存储过程为例。
分别建立插入、更新和删除存储过程。
InsertSuppliers存储过程定义如下:
CREATE PROCEDURE [dbo].[InsertSuppliers]
-- Add the parameters for the stored procedure here
@CompanyName nvarchar(40),
@ContactName nvarchar(30),
@ContactTitle nvarchar(30),
@Address nvarchar(60),
@City nvarchar(15),
@Region nvarchar(15),
@PostalCode nvarchar(10),
@Country nvarchar(15),
@Phone nvarchar(24),
@Fax nvarchar(24),
@HomePage ntext
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTOSuppliers(CompanyName,ContactName,ContactTitle,Address,City,Region,PostalCode,Country,Phone,Fax,HomePage)
VALUES(@CompanyName,@ContactName,@ContactTitle,@Address,@City,@Region,@PostalCode,@Country,@Phone,@Fax,@HomePage);
SELECT SCOPE_IDENTITY() AS SupplierID;
END
DeleteSuppliers存储过程定义如下:
CREATE PROCEDURE [dbo].[DeleteSuppliers]
-- Add the parameters for the stored procedure here
@SupplierID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DELETE Suppliers WHERE SupplierID=@SupplierID
END
UpdateSuppliers存储过程定义如下:
CREATE PROCEDURE [dbo].[UpdateSuppliers]
-- Add the parameters for the stored procedure here
@SupplierID int,
@CompanyName nvarchar(40),
@ContactName nvarchar(30),
@ContactTitle nvarchar(30),
@Address nvarchar(60),
@City nvarchar(15),
@Region nvarchar(15),
@PostalCode nvarchar(10),
@Country nvarchar(15),
@Phone nvarchar(24),
@Fax nvarchar(24),
@HomePage ntext
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE Suppliers SETCompanyName=@CompanyName,ContactName=@ContactName,ContactTitle=@ContactTitle,Address=@Address,City=@City,Region=@Region,PostalCode=@PostalCode,Country=@Country,Phone=@Phone,Fax=@Fax,HomePage=@HomePage
WHERE SupplierID=@SupplierID
END
然后,在VS可视化设计器中,打开实体模式edmx文件,然后在Suppliers实体上鼠标右键à“存储过程映射”,然后在在分别设置存储过程即可。如下图所示:

至此,存储过程映射完毕。我们下面来具体的使用,代码如下:
使用存储过程Insert:
[Test]
public void SPInsert()
{
using (var db = new NorthwindEntities1())
{
var supplier = new Suppliers();
supplier.CompanyName = "cnblogs";
supplier.ContactName = "xray2005";
supplier.ContactTitle = "net";
supplier.City = "成都";
supplier.Region = "四川";
supplier.Country = "中国";
supplier.PostalCode = "600041";
supplier.Phone = "028-8001";
supplier.Fax = "028-8002";
supplier.HomePage = "http://xray2005.cnblogs.com";
db.AddToSuppliers(supplier);
db.SaveChanges();
}
}
使用存储过程Update:
[Test]
public void SPUpdate()
{
using (var db = new NorthwindEntities1())
{
var supplier = db.Suppliers.FirstOrDefault(s => s.SupplierID == 30);
Assert.IsNotNull(supplier);
supplier.CompanyName = "CNBLOGS";
supplier.ContactName = "xray2005";
supplier.ContactTitle = "♂风风车.net";
supplier.City = "成都";
supplier.Region = "四川";
supplier.Country = "China";
supplier.PostalCode = "600040";
supplier.Phone = "028-1008611";
supplier.Fax = "028-10086";
supplier.HomePage = "http://www.cnblogs.com/xray2005";
db.SaveChanges();
}
}
使用存储过程Delete:
[Test]
public void SPDelete()
{
using (var db = new NorthwindEntities1())
{
var supplier = db.Suppliers.FirstOrDefault(s => s.SupplierID == 31);
Assert.IsNotNull(supplier);
db.DeleteObject(supplier);
db.SaveChanges();
var supplier1 = db.Suppliers.FirstOrDefault(s => s.SupplierID == 31);
Assert.IsNull(supplier1);
}
}
Entity Framework 学习中级篇4—存储过程(下)的更多相关文章
- Entity Framework 学习中级篇3—存储过程(中)
目前,EF对存储过程的支持并不完善.存在以下问题: l EF不支持存储过程返回多表联合查询的结果集. l EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...
- Entity Framework 学习中级篇2—存储过程(上)
目前,EF对存储过程的支持并不完善.存在以下问题: l EF不支持存储过程返回多表联合查询的结果集. l EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...
- Entity Framework 学习中级篇1—EF支持复杂类型的实现
本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...
- Entity Framework学习初级篇2
Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍 本节,简单的介绍E ...
- Entity Framework 学习初级篇1--EF基本概况
转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685011.html 最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不 ...
- Entity Framework学习初级篇1--EF基本概况《转》
最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不是很完善,半成品.不过,据说在.Net4.0中,微软将推荐使用此框架,并会有所改善.而且,现在基本上所有数据库均提供了对EF的支 ...
- Entity Framework 学习初级篇--基本操作:增加、更新、删除、事务(转)
摘自:http://www.cnblogs.com/xray2005/archive/2009/05/17/1458568.html 本节,直接写通过代码来学习.这些基本操作都比较简单,与这些基本操作 ...
- Entity Framework 学习初级篇7--基本操作:增加、更新、删除、事务
本节,直接写通过代码来学习.这些基本操作都比较简单,与这些基本操作相关的内容在之前的1至6节基本介绍完毕. l 增加: 方法1:使用AddToXXX(xxx)方法:实例代码如下: ...
- Entity Framework 学习高级篇2—改善EF代码的方法(下)
,IQueryable<Customers>>( (database) => database.Customers.Where(c => c.City == " ...
随机推荐
- 外部系统集成BIEE
1.外部系统集成BIEE 隐藏工具栏和仪表盘右上角的菜单 2.BIEE 11g 嵌入Iframe InIFrameRenderingMode有三种取值,分别是prohibit.sameDomainOn ...
- BeautifulSoup抓取列表页锚文本
素闻BeautifulSoup提取效率低,艾玛,第一印象果然是很要命的,反正比Re 和 Lxml 是要慢的,不过就无奈Re的正则折腾来折腾去,没写出来,Lxml 的 Xpath 又用得不好. 不过就这 ...
- 关于通过addClass与removeClass用jquery控制有良好兼容的CSS3样式
hi:)好久不见~最近被jquery的animate对某些CSS3特性不兼容搞的头晕眼花,果断百度,阅读了一些高手的博客后突然发现平常很少用到的addClass和removeClass属性居然还可以这 ...
- Python学习笔记_Chapter 7web开发
1.web应用元素 a.成员: web浏览器 web服务器 b.行为: web请求: 请求内容: 静态内容:如html文件,图像. 动态内容:需服务器运行一个程序进而做出响应. 网关接口&CG ...
- 6、plsql编程
一.PLSQL编程思维导图 二.PLSQL编程思维导图对应笔记 PL/SQL编程 @Holly老师 5.1 为什么学习PL/SQL编程? 当我们要批量插入100万数据,怎么办? .难道要写一百条ins ...
- vconfig 的使用
http://man.cx/vconfig%288%29 vconfig 作用: (802.1q)VLAN配置程序 root@hbg:/# vconfig --helpBusyBox v1.22.1 ...
- ubuntu 14.04 GDAL
autotools-dev comerr-dev hdf5-helpers icu-devtools krb5-multidev libarmadillo4 libarpack2 libblas3 l ...
- kettle连接Hive中数据导入导出(6)
1.hive往外写数据 http://wiki.pentaho.com/display/BAD/Extracting+Data+from+Hive+to+Load+an+RDBMS 连接hive
- 关于java的上转型对象
1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...
- hibernate 配置文件
hibernate.cfg.xml </session-factory> //DAO类 package com.hanqi.dao; import org.hibernate.Sessio ...