将插入、更新和删除操作映射到存储过程

问题

  您想在存储过程中映射插入、更新和删除操作。

解决方案

  下图所示的运动员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存储过程处理(八)的更多相关文章

  1. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  2. 《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍

    Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件 ...

  3. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  4. 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型

    不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (5) -----第二章 实体数据建模基础之有载荷和无载荷的多对多关系建模

    2-3 无载荷(with NO Payload)的多对多关系建模 问题 在数据库中,存在通过一张链接表来关联两张表的情况.链接表仅包含连接两张表形成多对多关系的外键,你需要把这两张多对多关系的表导入到 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (28) ------ 第五章 加载实体和导航属性之测试实体是否加载与显式加载关联实体

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-11  测试实体引用或实体集合是否加载 问题 你想测试关联实体或实体集合是否已经 ...

  8. 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...

随机推荐

  1. 七牛云存储官方接口PHP版本

    PHP SDKv6 此 SDK 适用于 PHP 5.1.0 及其以上版本.基于 七牛云存储官方API 构建.使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上. ...

  2. Java ArrayList Sort

    Collections.sort(hits_list, new Comparator<ScoreDoc>(){ @Override public int compare(ScoreDoc ...

  3. 软件开发杂谈之从需求到上线---valen

    背景 IT已经成为当代企业必不可少的竞争手段,从无到有到标配,可以说以后不懂IT的就是文盲这句一点也不过,而软件开发是个复杂工程,零零碎碎各种理论工具和技巧,一言难尽. 本文意在言简意赅,简述软件开发 ...

  4. Bmob第三方登录详解

    Bmob第三方登录详解 Bmob 第三方登录 简介 本文主要介绍新浪微博,QQ,微信的登录接入以及如何配合BmobSDK中的第三方登录功能实现第三方登录. 在使用之前请先按照快速入门创建好可以调用Bm ...

  5. 转】Apache解决高并发和高可用

    原博主于: http://www.ha97.com/5803.html   感谢! 服务器集群 Apache 和 nginx(web服务器) 1.  多台集群机器联合处理一个任务. 2.  一台机器处 ...

  6. LCD1602汉字、自定义字符取模

    用zimo221软件, 新建一个8*8的图像,留出左边3列,用右边5列点出自定义字符,选择取模方式C51,就可得到对应的编码 如下图:温度符号℃的编码

  7. HDU1856More is better(并查集)

    最近发现以前的东西都忘得差不多了,在这里刷刷水题 并查集: int find_parent(int x) { return x = p[x] ? x : p[x] = find_parent(p[x] ...

  8. 应用XML作为数据库的快速开发框架

    背景 我经常应用C#开发一些小的桌面程序,这些桌面程序往往有以下几个特点: 程序比较小,开发周期很短. 程序的数据量不大,多数情况下不超过1万行记录. 对程序的性能要求不高. 程序并发很少或者基本没有 ...

  9. UML图示与代码对照

    本文转载:http://www.cnblogs.com/iamlilinfeng/archive/2012/08/29/2662740.html 一.类继承 1 public class Father ...

  10. hibernate-mapping的各种属性配置

    先给出一份常见的持久化类配置文件大概熟悉一下 <strong><spanstyle="font-size: 18px;"><hibernate-map ...