主从表 级联新增

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】----------主从表级联操作的更多相关文章

  1. MySQL第五个学习笔记 该数据表的操作

    MySQL在创建表,创建.frm文件保存表和列定义.索引存储在一个.MYI(MYindex)且数据存储在有.MYD(MYData)扩展名的文件里.   一.用SHOW/ DESCRIBE语句显示数据表 ...

  2. MySql cmd下的学习笔记 —— 有关建立表的操作(有关于数据类型)

    (01)建表的过程实际上是 声明字段 的过程 一. 列类型(字段): 存储同样的数据时,不同的列类型,所占据的空间和效率是不一样的,这就是建表时要考虑的意义. 二.MySQL三大列类型     数值型 ...

  3. JavaScript学习笔记(10)——JavaScript语法之操作DOM

    1.页面输出用document.write()方法,但是不可以在window.onload中用,否则整个html页面将被覆盖. 2.通过javascript获取对象后,改变对象中的html内容:doc ...

  4. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

  5. X-Cart 学习笔记(四)常见操作

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...

  6. EF学习笔记(十二):EF高级应用场景

    学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...

  7. EF学习笔记(十一):实施继承

    学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里, ...

  8. EF学习笔记(十) 处理并发

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(九):异步处理和存储过程 本篇原文链接:Handling Concurrency Concurrency ...

  9. EF学习笔记(八):更新关联数据

    学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考 ...

随机推荐

  1. android基础(四)service

    Service的两种启动方式:startService()与bindService()   statService:生命周期:[onCreate()-  >onStartCommand()-&g ...

  2. Sublime Text 3安装与使用

    本文是Sublime Text 全程指引 by Lucida (http://www.cnblogs.com/figure9/p/sublime-text-complete-guide.html)的笔 ...

  3. 关于ubuntu下词典安装

    圣诞快乐!merry xmas! 身为程序猿和研究僧,英文文献是经常接触的,所以在ubuntu下当然需要一款英汉词典啦 查了下推荐stardict的比较多,于是学着安装了下,感觉还不错,但是只有词典功 ...

  4. 黑马程序员:Java编程_多线程

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路 ...

  5. 在ubuntu下安装QQ

    (参考链接   :http://jingyan.baidu.com/album/47a29f24577776c01423991a.html?picindex=3) 一 .安装  wine 1.下载一个 ...

  6. POJ-1743 Musical Theme(后缀数组)

    题目大意:给一个整数序列,找出最长的连续变化相同的.至少出现两次并且不相重叠一个子序列. 题目分析:二分枚举长度进行判定. 代码如下: # include<iostream> # incl ...

  7. 自定义滚动条样式(jQuery插件、Webkit、IE)

    -------------jQuery滚动条插件------------- http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html http: ...

  8. MPI运行程序(接触)

    网友遇到的问题并解决问题:mpich2在多个节点上运行并行程序时出错 我使用mpich2时遇到一下问题: 当我运行一个计算圆周率的并行程序cpi.c时,我想在指定的若干个节点上运行这个程序,比如hos ...

  9. 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 编 ...

  10. Storm简介

    Storm特性 1. 低延迟和高性能 在一个小集群中,每个节点每秒可以处理数以百万计的消息. 2. 可扩展 在Storm集群中主要有三个实体:工作进程.线程和任务.Storm集群中每台机器上都可以运行 ...