《Entity Framework 6 Recipes》中文翻译——第十二章自定义EntityFramework对象(一)
本章的方法探讨一些可以应用于对象和实体框架的流程定制。这些方法涵盖了许多“幕后”的东西,它可以使你的代码更统一,比如通过更关注应用程序核心业务规则执行的细节,应用范围更广泛。我们开始本章的一个方法,告诉你如何拥有自己的代码执行SaveChanges()在您的应用程序中。如果你想在你的应用程序中从一个单一的点执行业务规则,那么这个方法和一些其他的特别有用的。在其他的方法中,我们将向您展示如何跟踪数据库连接,如何自动响应收集更改,如何实现级联删除,如何分配默认值,以及如何使用强类型XML属性。所有这些方法的共同点是延伸在实体框架的对象和过程使你的代码更具弹性的,均匀的,和可维护性。
执行代码在SaveChange()时被调用
问题
你要执行的代码都是在数据上下文savechanges()执行时被调用
解决方案
让我们说,你有一个模型,代表一个求职者。作为该模型的一部分,您希望将包含申请人的简历的文件被删除时,申请人的记录被删除。你可以在你的应用程序中找到每一个地方,你需要删除一个申请人的记录,但你想要一个更一致和统一的方法。

为了确保申请人的简历文件被删除时,申请人被删除,则在DbContext中从写SavingChanges()方法。在我们的方法中,我们需要监测DbContext的改动,包括删除申请人实体的实例。接下来我们需要告诉实体框架通过调用真正的savechanges()方法保存更改。最后,对于每一个已删除的申请人,我们需要删除相关的简历文件。
using (var context = new School5Entities())
{
var path1 = "Alex Jones.txt";
File.AppendAllText(path1, "Alex Jones\n Resume\n...");
var path2 = "Janis Rogers.txt";
File.AppendAllText(path2, "Janis Rodgers\n Resume\n...");
var app1 = new Applicant
{
Name = "Alex Jones",
ResumePath = path1
};
var app2 = new Applicant
{
Name = "Janis Rogers",
ResumePath = path2
};
context.Applicants.Add(app1);
context.Applicants.Add(app2);
context.SaveChanges();
// delete Alex Jones
context.Applicants.Remove(app1);
context.SaveChanges(); }
public override int SaveChanges()
{
Console.WriteLine("Saving Changes...");
var applicants = this.ChangeTracker.Entries().Where(e => e.State == System.Data.Entity.
EntityState.Deleted).Select(e => e.Entity).OfType<Applicant>().ToList();
Console.WriteLine("\n{0} applicants deleted",
applicants.Count().ToString());
foreach (var app in applicants)
{
File.Delete(app.ResumePath);
Console.WriteLine("\n{0}'s resume at {1} deleted",
app.Name, app.ResumePath);
}
int changes = base.SaveChanges();
return changes;
}
运行结果:

《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)的多对多关系建模 问题 在数据库中,存在通过一张链接表来关联两张表的情况.链接表仅包含连接两张表形成多对多关系的外键,你需要把这两张多对多关系的表导入到 ...
- Gradle 1.12 翻译——第十二章 使用Gradle 图形用户界面
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- 第三部分:Android 应用程序接口指南---第二节:UI---第十二章 自定义组件
第12章 自定义组件 Android平台提供了一套完备的.功能强大的组件化模型用于搭建用户界面,这套组件化模型以View和 ViewGroup这两个基础布局类为基础.平台本身已预先实现了多种用于构建界 ...
- 第十二章:window对象
第十一章介绍了window对象及其客户端javascript所扮演的核心角色:它是客户端javascript程序的全局对象.本章介绍window对象的属性和方法,这些属性定义了不同的API,但是只有一 ...
随机推荐
- PHP实现分页:文本分页和数字分页
来源:http://www.ido321.com/1086.html 最近,在项目中要用到分页.分页功能是经常使用的一个功能,所以,对其以函数形式进行了封装. // 分页分装 /** * $pageT ...
- Android - LayoutInflater
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- java 复习003
今天主要复习下数据结构的东西 树 自平衡二叉查找树 AVL树(高平衡树)(wiki) 特性:任何节点的两个子树的高度最大差别为一 时间复杂度:查找.插入和删除在平均和最坏情况下都是O(log n) 红 ...
- EmEditor正则表达式例子
正则表达式中 单词指的是由字母.数字.下划线组合而成的字符串,用符号表示为\w(小写). 空白符包括单字节空格.双字节空格.制表符,用符号表示为\s(小写). 1.匹配被双引号包含的所有字符串(str ...
- HDU-4726 Kia's Calculation 贪心
题目链接:http://acm.hdu.edu.cn/userstatus.php?user=zhsl 题意:给两个大数,他们之间的加法法则每位相加不进位.现在可以对两个大数的每位重新排序,但是首位不 ...
- [Windows]VS2010如何以管理员权限启动?(转)
在某些项目进行开发的时候,需要提升应用程序本身的权限,这个是很容易的.但是如何让VS2010启动的时候就已管理员权限运行程序呢?为这个问题苦恼了好久,终于找到了办法. 找到VS2010的快捷方式:右击 ...
- 信息图:iOS 7开发者需要知道的事
如果你想为iOS 设备开发app,你需要知道如何与软件交互,如何设计,你还要知道苹果独特的开发理念和开发工具.真正的能力还需要成功地从其他行业领域借鉴核心概念.最后把所有这些东西糅合进你的信息库中 ...
- ocp 1Z0-043 131-205题解析
131. Which three methods can you use to run an Automatic Database Diagnostic Monitor (ADDM) analysis ...
- HDU 3265 Posters (线段树+扫描线)(面积并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3265 给你n个中间被挖空了一个矩形的中空矩形,让你求他们的面积并. 其实一个中空矩形可以分成4个小的矩 ...
- POJ1179Polygon(DP)
Polygon Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4456 Accepted: 1856 Descripti ...