【EF学习笔记10】----------主从表级联操作
主从表 级联新增
Console.WriteLine("=========主从表 级联新增==========");
using (var db = new Entities())
{
var classes = new Classes()
{
ClassName = "数学10501",
Student = new List<Student>
{
new Student{StudentName="小小",Birthday=DateTime.Parse("1990-1-1")},
new Student{StudentName="大大",Birthday=DateTime.Parse("1990-1-1")},
}
};
db.Classes.Add(classes);//标记主表状态为 Added
foreach (var st in classes.Student)
{
Console.WriteLine(db.Entry(st).State);//打印从表实体状态
}
db.SaveChanges();
}
追踪SQL语句:

执行结果:


说明:因为是主从表关系,所以讲主表标记为Added状态时,子表中的实体也会被标记。此处执行了3条SQL语句,分别新增班级和学生。
主从表 级联删除
先来看一下数据,两张表是外键关系。

using (var db = new Entities())
{
var classes = db.Classes.Where(i => i.ClassName == "数学10501").FirstOrDefault();
db.Classes.Remove(classes);//标记实体状态为 Deleted
db.SaveChanges();
}
执行结果:

说明:因为 班级表Classes 和 学生表 Student具有外键关系,所以删除班级表的数据违反了外键约定。
情况一:删除主表数据 同时标记 从表外键为NULL
using (var db = new Entities())
{
var classes = db.Classes.Where(i => i.ClassName == "数学10501").Single(); db.Entry(classes).Collection(v => v.Student).Load();//显式加载 db.Classes.Remove(classes);//标记状态 Deleted db.SaveChanges();
}
执行结果:SQL


说明:按照EF的思路,要删除从表的外键,则同时加载主表数据和从表数据,使用Load方法。Collection方法加载导航属性是集合的类型。
情况二:删除主表数据 同时删除从表
//数据库非级联状态下 删除主表数据 同时 删除从表数据
using (var db = new Entities())
{
var classes = db.Classes.Where(i => i.ClassName == "英语10501").Single();//查询出主表数据 //此处注意 需要调用ToList方法
//否则会报错 未经处理的异常: System.InvalidOperationException: 集合已修改;可能无法执行枚举操作
//foreach内部是不允许修改状态的。
foreach (var student in classes.Student.ToList())
{
db.Student.Remove(student);//手动标记从表数据为 Deleted 状态
} db.Classes.Remove(classes);//标记主表状态为 Deleted db.SaveChanges();
}
执行结果:


说明:此处数据库为非级联操作,执行时必须调用ToList方法,才能在foreach中修改状态。
【EF学习笔记10】----------主从表级联操作的更多相关文章
- MySQL第五个学习笔记 该数据表的操作
MySQL在创建表,创建.frm文件保存表和列定义.索引存储在一个.MYI(MYindex)且数据存储在有.MYD(MYData)扩展名的文件里. 一.用SHOW/ DESCRIBE语句显示数据表 ...
- MySql cmd下的学习笔记 —— 有关建立表的操作(有关于数据类型)
(01)建表的过程实际上是 声明字段 的过程 一. 列类型(字段): 存储同样的数据时,不同的列类型,所占据的空间和效率是不一样的,这就是建表时要考虑的意义. 二.MySQL三大列类型 数值型 ...
- JavaScript学习笔记(10)——JavaScript语法之操作DOM
1.页面输出用document.write()方法,但是不可以在window.onload中用,否则整个html页面将被覆盖. 2.通过javascript获取对象后,改变对象中的html内容:doc ...
- Android:日常学习笔记(10)———使用LitePal操作数据库
Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- EF学习笔记(十二):EF高级应用场景
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...
- EF学习笔记(十一):实施继承
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里, ...
- EF学习笔记(十) 处理并发
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(九):异步处理和存储过程 本篇原文链接:Handling Concurrency Concurrency ...
- EF学习笔记(八):更新关联数据
学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考 ...
随机推荐
- android技巧(三)屏幕适配
屏幕适配策略: 1.控件使用wrap_content.match_parent控制某些视图组件的宽度和高度,而不是硬编码的尺寸. “wrap_content”系统就会将视图的宽度或高度设置成所需的最小 ...
- windows核心编程---第二章 字符和字符串处理
使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...
- Brief Tour of the Standard Library
10.1. Operating System Interface The os module provides dozens of functions for interacting with the ...
- NullReferenceException UnityEngine.Transform.get_localPosition
NullReferenceException UnityEngine.Transform.get_localPosition unity程序中,需要取得GO自身的Transform,出现如上空异常, ...
- HDU 4777 Rabbit Kingdom (2013杭州赛区1008题,预处理,树状数组)
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- WCF终结点配置
错误信息:已有针对 IP 终结点 127.0.0.1:8235 的侦听器.如果有其他应用程序已在侦听此终结点,或者,如果在服务主机中具有多个服务终结点,这些终结点具有相同的 IP 终结点但绑定配置不兼 ...
- python数据结构与算法——字典树
class TrieTree(): def __init__(self): self.root = {} def addNode(self,str): # 树中每个结点(除根节点),包含到该结点的单词 ...
- android中的AIDL进程间通信
关于IPC应该不用多介绍了,Android系统中的进程之间不能共享内存,那么如果两个不同的应用程序之间需要通讯怎么办呢?比如公司的一个项目要更新,产品的需求是依附于当前项目开发一个插件,但是呢这个插件 ...
- UML的类图、时序图表示方法以及惯例
<UML类图图示样例>说明:http://wenku.baidu.com/link?url=DEaRFyVIAH4kZ7TolplfFhFhmAk3gFaNSOH7XPzfTnCWY4CB ...
- Java入门教程总目录
Java入门教程总目录 持续更新中... 1.Java常识汇总 2.Java框架对比 3.Java技术路线 4.Java编码规范 5.Java环境变量配置 6.枚举 7.操作符 12.定时任务