在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—存储过程(下)的更多相关文章

  1. Entity Framework 学习中级篇3—存储过程(中)

    目前,EF对存储过程的支持并不完善.存在以下问题: l         EF不支持存储过程返回多表联合查询的结果集. l         EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...

  2. Entity Framework 学习中级篇2—存储过程(上)

    目前,EF对存储过程的支持并不完善.存在以下问题: l         EF不支持存储过程返回多表联合查询的结果集. l         EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...

  3. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  4. Entity Framework学习初级篇2

    Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍 本节,简单的介绍E ...

  5. Entity Framework 学习初级篇1--EF基本概况

    转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685011.html 最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不 ...

  6. Entity Framework学习初级篇1--EF基本概况《转》

    最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不是很完善,半成品.不过,据说在.Net4.0中,微软将推荐使用此框架,并会有所改善.而且,现在基本上所有数据库均提供了对EF的支 ...

  7. Entity Framework 学习初级篇--基本操作:增加、更新、删除、事务(转)

    摘自:http://www.cnblogs.com/xray2005/archive/2009/05/17/1458568.html 本节,直接写通过代码来学习.这些基本操作都比较简单,与这些基本操作 ...

  8. Entity Framework 学习初级篇7--基本操作:增加、更新、删除、事务

    本节,直接写通过代码来学习.这些基本操作都比较简单,与这些基本操作相关的内容在之前的1至6节基本介绍完毕. l           增加: 方法1:使用AddToXXX(xxx)方法:实例代码如下: ...

  9. Entity Framework 学习高级篇2—改善EF代码的方法(下)

    ,IQueryable<Customers>>( (database) => database.Customers.Where(c => c.City == " ...

随机推荐

  1. box2d 计算自由落体下一帧的位置

    var dt:Number=1/30; var y0:Number=_body.GetPosition().y; var y:Number=y0+_body.GetLinearVelocity().y ...

  2. cocos2d-3.x 创建动画

    1.多文件帧序列动画 TrademarkAnimation.h #ifndef __TRADEMARK_ANIMATION_H__ #define __TRADEMARK_ANIMATION_H__ ...

  3. Activity生命周期方法调用finish后的不同表现

    今天宿舍一个哥们出去面试遇到了这个面试题:"在activity oncreate()调用finish()"生命周期是怎么样的? 我赶紧写了些demo,发现确实很有趣: packag ...

  4. VB VBA VBS有什么区别?

    VB和VBA本就是同宗的姐妹,只不过姐姐VB的功夫要比妹妹VBA历害些.不过姐姐只会单打独斗是女强人:妹妹却只会傍大款(例如Office).姐姐有生育能力,是真正的女人:妹妹却不会生崽(生成.EXE) ...

  5. Python操作IHTMLDocument2用于自动化测试

    有些软件的界面采用Win32窗口嵌套一个IE控件,用Spy++只能识别出一个Internet Explorer_Server控件.常用的几个API函数无法取到IE控件里面的内容,更无法对里面的控件进行 ...

  6. windows网络编程(1)同步套接字

    1.socket是应用程序与网络驱动程序的桥梁,在应用程序中创建socket,将数据交付给socket即完成数据传输,剩下的任务由socket和网络驱动程序完成: 2.套接字类型:SOCK_STREA ...

  7. HDU 1907 John(取火柴博弈2)

    传送门 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int ...

  8. NSDictionary 的内部实现

    NSDictionary是IOS中使用的一种key-value容器,参考cocotron的源代码,NSDictionary使用NSMapTable实现. NSMapTable同样是一个key-valu ...

  9. C语言 - 预编译

    1.#ifdef 实现 与 或#if (defined SIMULATION) && (defined _FMM_LOG)#endif #if (!defined A) || (!de ...

  10. ckeditor 插件

    dialog 下面 建立一个 插件.js CKEDITOR.dialog.add("about", function (a) { var aaa = "<form& ...