【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基础(四)service
Service的两种启动方式:startService()与bindService() statService:生命周期:[onCreate()- >onStartCommand()-&g ...
- Sublime Text 3安装与使用
本文是Sublime Text 全程指引 by Lucida (http://www.cnblogs.com/figure9/p/sublime-text-complete-guide.html)的笔 ...
- 关于ubuntu下词典安装
圣诞快乐!merry xmas! 身为程序猿和研究僧,英文文献是经常接触的,所以在ubuntu下当然需要一款英汉词典啦 查了下推荐stardict的比较多,于是学着安装了下,感觉还不错,但是只有词典功 ...
- 黑马程序员:Java编程_多线程
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路 ...
- 在ubuntu下安装QQ
(参考链接 :http://jingyan.baidu.com/album/47a29f24577776c01423991a.html?picindex=3) 一 .安装 wine 1.下载一个 ...
- POJ-1743 Musical Theme(后缀数组)
题目大意:给一个整数序列,找出最长的连续变化相同的.至少出现两次并且不相重叠一个子序列. 题目分析:二分枚举长度进行判定. 代码如下: # include<iostream> # incl ...
- 自定义滚动条样式(jQuery插件、Webkit、IE)
-------------jQuery滚动条插件------------- http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html http: ...
- MPI运行程序(接触)
网友遇到的问题并解决问题:mpich2在多个节点上运行并行程序时出错 我使用mpich2时遇到一下问题: 当我运行一个计算圆周率的并行程序cpi.c时,我想在指定的若干个节点上运行这个程序,比如hos ...
- mac 下安装 lua5.3 + cjson
1.lua 5.3的安装 直接去官网下载 http://www.lua.org/ftp/lua-5.3.3.tar.gz make macosx sudo make install 2.CSJON 编 ...
- Storm简介
Storm特性 1. 低延迟和高性能 在一个小集群中,每个节点每秒可以处理数以百万计的消息. 2. 可扩展 在Storm集群中主要有三个实体:工作进程.线程和任务.Storm集群中每台机器上都可以运行 ...