
正文
Entity Framework 6 Recipes 2nd Edition(10-8)译 - >映射插入、修改、删除操作到存储过程
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
10-8. 映射插入、修改、删除操作到存储过程
问题
想要映射插入、修改、删除操作到存储过程
解决方案
假设已有运动员实体模型,如Figure 10-8所示. 对应的数据库表如Figure 10-9所示. 我们想要用存储过程来执行插入,修改,删除操作。

Figure 10-8. 运动员实体模型

Figure 10-9. 包含一些基本信息的运动员表
为实体映射存储过程到插入,修改,删除操作,执行以下操作:
1.在数据库里,创建如Listing 10-21所示的存储过程
Listing 10-21. The Stored Procedures for the Insert, Update, and Delete Actions
create procedure [chapter10].[InsertAthlete]
(@Name varchar(50), @Height int, @Weight int)
as
begin
insert into Chapter10.Athlete values (@Name, @Height, @Weight)
select SCOPE_IDENTITY() as AthleteId
end
go
create procedure [chapter10].[UpdateAthlete]
(@AthleteId int, @Name varchar(50), @Height int, @Weight int)
as
begin
update Chapter10.Athlete set Name = @Name, Height = @Height, [Weight] = @Weight
where AthleteId = @AthleteId
end
go
create procedure [chapter10].[DeleteAthlete]
(@AthleteId int)
as
begin
delete from Chapter10.Athlete where AthleteId = @AthleteId
end
2. 右击模型设计视图,选择“从数据库更新模型”,选择上面创建的三个存储过程,单击“完成”,这样存储过程就添加到了模型中
3. 右击Athlete实体, 选择“存储过程映射”,为每个操作选择对应的存储过程. 为插入操作的“结果列绑定” AthleteId (见Figure 10-10).

Figure 10-10. 映射存储过程,参数,和返回值 后的操作、修改、删除操作
它是如何工作的?
我们用存储过程更新了模型,这样模型就可以使用存储过程了,然后我们映射存储过程到实体的插入、修改、删除操作上.
在本小节, 我们尽可能让存储过程简单. 它们从实体属性里获取参数,并且执行操作.插入操作里我们需要返回存储过程返回自增列的ID值给实体.所以需要把存储过程返回的Id值映射到实体的AthleteId属性,这一步很重要.没有这一步,EF不能获取新创建的实体ID。
你可能会问“我什么时候把存储过程映射到实体操作了?”,其实大多数情况下,EF会自动为插入、修改、删除操作生成高效的代码。
你可能也会想知道:“那我什么时候需要用存储过程来映射操作?”,这个问题的答案有个最佳的实践:
当你公司要求你用存储过程插入、修改、删除来操作表的时候。
你有一个额外的任务,需要执行额外的操作.比如, 你想要管理一个审计运算或执行一些复杂的业务逻辑, 又或是对一个用户进行权限安全检查等。
你的实体基于查询视图(QueryView) (见第6章和15章)
static void Main(string[] args)
{
using (var context = new EFRecipesEntities1008())
{
context.Database.ExecuteSqlCommand("delete from chapter10.Athlete");
context.Athletes.Add(new Athlete
{
Name = "Nancy Steward",
Height = 167,
Weight = 53
});
context.Athletes.Add(new Athlete
{
Name = "Rob Achers",
Height = 170,
Weight = 77
});
context.Athletes.Add(new Athlete
{
Name = "Chuck Sanders",
Height = 171,
Weight = 82
});
context.Athletes.Add(new Athlete
{
Name = "Nancy Rodgers",
Height = 166,
Weight = 59
});
context.SaveChanges();
}
using (var context = new EFRecipesEntities1008())
{
var all = context.Athletes;
context.Athletes.Remove(all.First(o => o.Name == "Nancy Steward"));
all.First(o => o.Name == "Rob Achers").Weight = 80;
context.SaveChanges();
}
using (var context = new EFRecipesEntities1008())
{
Console.WriteLine("All Athletes");
Console.WriteLine("============");
foreach (var athlete in context.Athletes)
{
Console.WriteLine("{0} weighs {1} Kg and is {2} cm in height",
athlete.Name, athlete.Weight, athlete.Height);
}
}
Console.WriteLine("\nPress any key to exit...");
Console.ReadKey();
}
输出结果如下Listing 10-22所示:
All Athletes
============
Rob Achers weighs 80 Kg and is 170 cm in height
Chuck Sanders weighs 82 Kg and is 171 cm in height
Nancy Rodgers weighs 59 Kg and is 166 cm in height
附:创建示例用到的数据库的脚本文件
Entity Framework 6 Recipes 2nd Edition(10-8)译 - >映射插入、修改、删除操作到存储过程的更多相关文章- Entity Framework 6 Recipes 2nd Edition 译 ->; 目录 -持续更新
因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
- Entity Framework 6 Recipes 2nd Edition(9-1)译->;用Web Api更新单独分离的实体
第九章 在N层结构的应用程序中使用EF 不是所有的应用都能完全地写入到一个单个的过程中(就是驻留在一个单一的物理层中),实际上,在当今不断发展的网络世界,大量的应用程序的结构包含经典的表现层,应用程, ...
- Entity Framework 6 Recipes 2nd Edition(9-3)译->;找出Web API中发生了什么变化
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
- Entity Framework 6 Recipes 2nd Edition(9-4)译->;Web API 的客户端实现修改跟踪
9-4. Web API 的客户端实现修改跟踪 问题 我们想通过客户端更新实体类,调用基于REST的Web API 服务实现把一个对象图的插入.删除和修改等数据库操作.此外, 我们想通过EF6的Cod ...
- Entity Framework 6 Recipes 2nd Edition(13-4)译 ->; 有效地创建一个搜索查询
问题 你想用LINQ写一个搜索查询,能被转换成更有效率的SQL.另外,你想用EF的CodeFirst方式实现. 解决方案 假设你有如下Figure 13-6所示的模型 Figure 13-6. A s ...
- Entity Framework 6 Recipes 2nd Edition(13-2)译 ->; 用实体键获取一个单独的实体
问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Paint ...
- Entity Framework 6 Recipes 2nd Edition(13-3)译 ->; 为一个只读的访问获取实体
问题 你想有效地获取只是用来显示不会更新的操作的实体.另外,你想用CodeFirst的方式来实现 解决方案 一个非常常见行为,尤其是网站,就是只是让用户浏览数据.大多数情况下,用户不会更新数据.在这种 ...
- Entity Framework 6 Recipes 2nd Edition(13-5)译 ->; 使POCO的修改追踪更高
问题 你正在使用POCO,你想提高修改跟踪的性能,同时使内存消耗更少.另外,你想通过EF的CodeFirst方式来实现. 解决方案 假设你有一个关于Account(帐户)和相关的Payments(支付 ...
- Entity Framework 6 Recipes 2nd Edition(13-9)译 ->; 避免Include
问题 你想不用Include()方法,立即加载一下相关的集合,并想通过EF的CodeFirst方式实现. 解决方案 假设你有一个如Figure 13-14所示的模型: Figure 13-14. A ...
- Entity Framework 6 Recipes 2nd Edition(目录索引)
Chapter01. Getting Started with Entity Framework / 实体框架入门 1-1. A Brief Tour of the Entity Framework ...
随机推荐- 8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)
多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public ...
- [原创]Devexpress XtraReports 系列 3 创建主从报表
昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...
- AFNetworking 3.0迁移指南
AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...
- -_-#【Backbone】View
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- ecb gud
mx gdb不好用,好像是因为用了一个dedicated window,改用mx gud-gdb,好用. http://stackoverflow.com/questions/13560933/how ...
- Vuex核心知识(2.0)
Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式,它类似于 Redux 应用于 React 项目中,他们都是一种 Flux 架构.相比 Redux,Vuex 更简洁,学习成本更低.希望 ...
- IE浏览器URL中文传参,后端接收是乱码问题处理
这个问题还是因为IE浏览器是国外产品,人家交流的主要语言是英语,中文不识别. 直接上代码,亲测无误. //判断是否是IE浏览器 function isIE() { var userAgent = na ...
- 彻底弄懂 HTTP 缓存机制及原理 | 干货
来源:www.cnblogs.com/chenqf/p/6386163.html 前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个 ...
- 洛谷P3195 玩具装箱
P3195 [HNOI2008]玩具装箱TOY 第一道斜率优化题. 首先一个基本的状态转移方程是 要使f[i]最小,即b最小. 对于每个j,可以表示为一个点. 然后我们取固定斜率时截距最小的即可,高中 ...
- 关于Unity中蒙皮网格和布料的使用
所以物体的要绘制出来就必须要有网格组件+材质属性,如果还需要其他特效或丰富内容的话,还可以再加组件. 蒙皮网格和布料 1: 例如要模拟衣服,随风摆动,模拟布料需要用到蒙皮网格和布料;2: 蒙皮网格可以 ...
因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
第九章 在N层结构的应用程序中使用EF 不是所有的应用都能完全地写入到一个单个的过程中(就是驻留在一个单一的物理层中),实际上,在当今不断发展的网络世界,大量的应用程序的结构包含经典的表现层,应用程, ...
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
9-4. Web API 的客户端实现修改跟踪 问题 我们想通过客户端更新实体类,调用基于REST的Web API 服务实现把一个对象图的插入.删除和修改等数据库操作.此外, 我们想通过EF6的Cod ...
问题 你想用LINQ写一个搜索查询,能被转换成更有效率的SQL.另外,你想用EF的CodeFirst方式实现. 解决方案 假设你有如下Figure 13-6所示的模型 Figure 13-6. A s ...
问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Paint ...
问题 你想有效地获取只是用来显示不会更新的操作的实体.另外,你想用CodeFirst的方式来实现 解决方案 一个非常常见行为,尤其是网站,就是只是让用户浏览数据.大多数情况下,用户不会更新数据.在这种 ...
问题 你正在使用POCO,你想提高修改跟踪的性能,同时使内存消耗更少.另外,你想通过EF的CodeFirst方式来实现. 解决方案 假设你有一个关于Account(帐户)和相关的Payments(支付 ...
问题 你想不用Include()方法,立即加载一下相关的集合,并想通过EF的CodeFirst方式实现. 解决方案 假设你有一个如Figure 13-14所示的模型: Figure 13-14. A ...
Chapter01. Getting Started with Entity Framework / 实体框架入门 1-1. A Brief Tour of the Entity Framework ...
- 8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)
多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public ...
- [原创]Devexpress XtraReports 系列 3 创建主从报表
昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...
- AFNetworking 3.0迁移指南
AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...
- -_-#【Backbone】View
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- ecb gud
mx gdb不好用,好像是因为用了一个dedicated window,改用mx gud-gdb,好用. http://stackoverflow.com/questions/13560933/how ...
- Vuex核心知识(2.0)
Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式,它类似于 Redux 应用于 React 项目中,他们都是一种 Flux 架构.相比 Redux,Vuex 更简洁,学习成本更低.希望 ...
- IE浏览器URL中文传参,后端接收是乱码问题处理
这个问题还是因为IE浏览器是国外产品,人家交流的主要语言是英语,中文不识别. 直接上代码,亲测无误. //判断是否是IE浏览器 function isIE() { var userAgent = na ...
- 彻底弄懂 HTTP 缓存机制及原理 | 干货
来源:www.cnblogs.com/chenqf/p/6386163.html 前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个 ...
- 洛谷P3195 玩具装箱
P3195 [HNOI2008]玩具装箱TOY 第一道斜率优化题. 首先一个基本的状态转移方程是 要使f[i]最小,即b最小. 对于每个j,可以表示为一个点. 然后我们取固定斜率时截距最小的即可,高中 ...
- 关于Unity中蒙皮网格和布料的使用
所以物体的要绘制出来就必须要有网格组件+材质属性,如果还需要其他特效或丰富内容的话,还可以再加组件. 蒙皮网格和布料 1: 例如要模拟衣服,随风摆动,模拟布料需要用到蒙皮网格和布料;2: 蒙皮网格可以 ...






