《Entity Framework 6 Recipes》中文翻译——第十章EntityFramework存储过程处理(八)
将插入、更新和删除操作映射到存储过程
问题
您想在存储过程中映射插入、更新和删除操作。
解决方案
下图所示的运动员Athlete实体模型。底层数据库有一张运动员Athlete表。您想使用存储过程进行实体的插入、更新和删除操作。
要将存储的程序映射到“插入”、“更新”和“删除”操作中的“运动员”Athlete实体,做以下操作:
1、在数据库中创建一下存储过程
create procedure InsertAthlete
(@Name varchar(), @Height int, @Weight int)
as
begin
insert into Athlete values (@Name, @Height, @Weight)
select SCOPE_IDENTITY() as AthleteId
end
go create procedure UpdateAthlete
(@AthleteId int, @Name varchar(), @Height int, @Weight int)
as
begin
update Athlete set Name = @Name, Height = @Height, [Weight] = @Weight
where AthleteId = @AthleteId
end
go create procedure DeleteAthlete
(@AthleteId int)
as
begin
delete from Athlete where AthleteId = @AthleteId
end
2、右键单击设计面并从数据库中选择更新模型。选择新的存储过程,然后单击完成。这将将存储的程序添加到模型中。
3、右键单击Athlete实体,并选择“存储过程映射”。为每个操作选择存储的程序。对于插入操作,映射返回列AthleteId,
我们用我们在数据库中创建的存储过程来更新模型。这使得在模型中存储过程得以验证。一旦我们有了在模型中可用的存储过程,我们将它们映射到实体的插入、更新和删除操作中。在这个解决方案中,存储过程是简单的,因为你可以得到返回的实体键值。对于插入存储过程,我们需要返回实体的存储生成的键值。在这个解决方案中,存储生成的键值只是一个标识列。我们需要将此从存储过程返回插入操作,并将此返回值映射到运动员Vthlate的VthlateId属性。这是一个重要的一步。如果没有这个,实体框架将无法得到刚刚插入的实例运动员实体实体键。你可能会问:“我什么时候存储过程映射到操作?”在大多数情况下,实体框架将为插入、更新和删除操作生成有效的代码。您可能也会想:“我什么时候需要更换这个用我自己的存储程序?“这里是最好的练习回答这个问题。
•您的公司要求您使用存储过程为某些或所有的插入、更新或删除某些表的活动。
•在一个或多个操作期间,您有额外的任务要做。例如,您可能希望管理一个审计跟踪或执行一些复杂的业务逻辑,或者您需要利用用户的权限来执行安全检查的存储过程。
•您的实体基于查询视图(见第6章和第15章),这要求您将一些操作映射到存储过程中的某些操作。
4、执行存储过程操作
using (var context = new School5Entities())
{
context.Athletes.Add(new Athlete
{
Name = "Nancy Steward",
Height = ,
Weight =
});
context.Athletes.Add(new Athlete
{
Name = "Rob Achers",
Height = ,
Weight =
});
context.Athletes.Add(new Athlete
{
Name = "Chuck Sanders",
Height = ,
Weight =
});
context.Athletes.Add(new Athlete
{
Name = "Nancy Rodgers",
Height = ,
Weight =
});
context.SaveChanges();
}
using (var context = new School5Entities())
{
// do a delete and an update
var all = context.Athletes;
context.DeleteAthlete(all.First(o => o.Name == "Nancy Steward").AthleteId);
all.First(o => o.Name == "Rob Achers").Weight = ;
context.SaveChanges();
}
using (var context = new School5Entities())
{
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);
}
}
执行结果
《Entity Framework 6 Recipes》中文翻译——第十章EntityFramework存储过程处理(八)的更多相关文章
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- 《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍
Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件 ...
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型
不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...
- 《Entity Framework 6 Recipes》翻译系列 (5) -----第二章 实体数据建模基础之有载荷和无载荷的多对多关系建模
2-3 无载荷(with NO Payload)的多对多关系建模 问题 在数据库中,存在通过一张链接表来关联两张表的情况.链接表仅包含连接两张表形成多对多关系的外键,你需要把这两张多对多关系的表导入到 ...
- 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- 《Entity Framework 6 Recipes》中文翻译系列 (28) ------ 第五章 加载实体和导航属性之测试实体是否加载与显式加载关联实体
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-11 测试实体引用或实体集合是否加载 问题 你想测试关联实体或实体集合是否已经 ...
- 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...
随机推荐
- 微信公众平台开发(57)Emoji表情符号
微信公众平台开发 微信公众平台开发模式 企业微信公众平台 Emoji表情符号 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/crack-golden-egg ...
- 快速备份sqlserver2005以上版本数据库的方法-摘自网络
使用优化参数的备份命令 BACKUP DATABASE [test]TO DISK = N'D:\test_FULL_20110311_050001_1.bak',DISK = N'D:\test_F ...
- Using FastCGI to Host PHP Applications on IIS 7 -IIS7 怎么配置 PHP5
This article describes how to configure the FastCGI module and PHP to host PHP applications on IIS 7 ...
- 在linux上用dd命令实现ghost功能
ghost和g4l 安装操作系统,速度太慢,整个过程太冗长乏味了. 安装过程中,需要回答若干问题,系统需要安装无数个软件,创建和写入无数的文件.因为涉及到大量的文件定位和读写,速度一定是快不起来的. ...
- j2ee的十三个规范
转载 今天在做连接oracle数据库的时候,感受到了什么是规范.平时听到别人说学习j2ee一定要学习他的十三个规范,大概的知道每个规范是做什么的,每个“接口”是做什么的. 很早就听过 ...
- C# 6.0 的新特性
1. 自动的属性初始化器Auto Property initialzier 之前的方式: public class AutoPropertyBeforeCsharp6 { private string ...
- 【C语言】-一维数组
数组: 数组是一系列相同类型的有序数据的集合,数组中的每一个元素都是同一个数据类型,所有元素共用一个名字,用下标来区别数组中的每一个元素. C语言中,数组属于构造数据类型.一个数组中含有多个数组元素, ...
- poj 2226 Muddy Fields(最小覆盖点+构图)
http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- ASP.NET网站如何显示自己的网页图标
转载自 http://www.webtag123.com/dotnet/17238.html 1. 直接放个ico图标到你网站的根目录,并命名为favicon.ico就可以了.favicon.ico应 ...
- CentOS 7安装iptables服务,以及常用命令
之前使用的是CentOS6.5,并且学艺不精,用啥查啥,用完就忘.并且网上大部分资料是基于CentOS7之前的版本. 在CentOS7中,默认的防火墙不是iptables,而是firewalld.而且 ...