5.6.6 《一对一关联概述》 

5.6.7 《一对一关联CRUD演示》 

在两讲视频中,首先介绍了数据库中一对一关联表的设计规范,接着通过实例介绍了如何合适Entity Framework针对一对一关联的数据实体对象进行增删改操作。

5.6.6 《一对一关联概述》 

5.6.7 《一对一关联CRUD演示》  时长:11分53秒 难度:中

在两讲视频中,首先介绍了数据库中一对一关联表的设计规范,接着通过实例介绍了如何合适Entity Framework针对一对一关联的数据实体对象进行增删改操作。

创建对象的方法

public Person CreatePersonWithoutIdentityCard()
{
Person person = new Person() { Name = "ane" };
return person;
} public IdentityCard CreateIndentityCard()
{
IdentityCard card = new IdentityCard() { IDNumber = 1 };
return card;
}

方法一:在内存中创建好主从对象,并且通过导航属性关联,然后SaveChange()

/// <summary>
/// 主对象都是全新的,在内存中关联,然后同事写入数据库
/// 会生成两条SQL命令,
/// 第一条插入主对象得到ID,然后再使用此ID设置对象,然后插入
/// </summary>
[TestMethod]
public void TestAdd()
{
//1.1.创建一个Person对象,引用唯一的IdentityCard,并且插入数据
Person person = CreatePersonWithoutIdentityCard();
person.IdentityCard = CreateIndentityCard();
//追加到DbSet
context.Person.Add(person); //1.2.保存向数据库发送2条SQL命令.
//第一次为插入Person,返回主键.
//第二次用返回的主键插入IdentityCard.
int result = context.SaveChanges(); //1.3.共保存2条数据,所以result == 2
Assert.IsTrue(result == 2);
}

方法二:从数据库中装入主对象,new一个从对象,关联上主对象,然后SaveChange()

/// <summary>
/// 主对象是“老的”,从对象是“新”的,在内存中关联,然后写入数据库
/// </summary>
[TestMethod]
public void TestAdd2()
{
//2.1.创建一个Person对象,引用唯一的IdentityCard,并且插入数据
Person person = CreatePersonWithoutIdentityCard();
//追加到DbSet
context.Person.Add(person);
int result = context.SaveChanges();
Assert.IsTrue(result == 1); //2.2.创建一个新的从对象,并关联主对象
person.IdentityCard = CreateIndentityCard();
result = context.SaveChanges();
//共保存1条数据,所以result == 1
Assert.IsTrue(result == 1); //2.3.重新装入主从对象,现在两个对象应该都不为null
Person personFromDB = context.Person.Include("IdentityCard")
.FirstOrDefault(p => p.PersonID == person.PersonID);
Assert.IsNotNull(personFromDB);
Assert.IsNotNull(personFromDB.IdentityCard);
}

错误方法:

/// <summary>
/// 单独创建一个从对象,试图插入数据库,将会报告DbUpdateException异常
/// 最终数据没有插入,所以,“永远不要在一对一关联中单独插入从对象”
/// </summary>
[TestMethod]
//[ExpectedException(typeof(DbUpdateException))]
public void TestAdd3()
{
//3.1 创建一个“独立的”从对象
IdentityCard idCard = CreateIndentityCard();
//获取主键
int maxId = context.IdentityCard.Max(id => id.IdentityCardId);
idCard.IdentityCardId = maxId + 1;
//追加到DbSet
context.IdentityCard.Add(idCard);
//由于对应的主记录不存在,所以插入数据失败
int result = context.SaveChanges();
//此断言永远不可能被满足
Assert.IsTrue(result > 0);
}

删除对象:

修改对象:

EF – 6.一对一关联的更多相关文章

  1. EF – 6.一对一关联

    5.6.6 <一对一关联概述>  5.6.7 <一对一关联CRUD演示>  在两讲视频中,首先介绍了数据库中一对一关联表的设计规范,接着通过实例介绍了如何合适Entity Fr ...

  2. EF里一对一、一对多、多对多关系的配置和级联删除

    本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个PersonPhoto类,表示用户照片类 /// < ...

  3. Hibernate中的一对一关联

    Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...

  4. Hibernate一对一关联映射配置

    一.一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1 ...

  5. Hibernate之映射一对一关联

    一.一对一关联的概念: 一对一之间的关联是指:两张表中的信息是一对一的关系,比如我们每个人和身份证的关系,一个人对应一张身份证,一张身份证也只能对应一个人. Hibernate提供了两种映射一对一关联 ...

  6. Hibernate中一对一关联映射/组件映射

    Hibernate映射:一对一关联 1.按照外键映射 2.按照主键映射 组件映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映射方式分别 ...

  7. Hibernate中的一对一关联和组件的映射

    Hibernate提供了两种映射一对一映射关联关系的方式: 01.按照外键映射 02.按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这 ...

  8. 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句

    如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...

  9. 04.Hibernate一对一关联

        前言:本文主要介绍使用Hibernate映射一对一的关联关系的两种方式:使用外键映射.使用主键映射. 1.数据库表的一对一关联关系     本文根据客户信息表(tb_customer)和地址信 ...

随机推荐

  1. Codeforces 578B. "Or" Game(思维题)

    我们知道所有sigma(2^i){i<n}比2^n小,所以我们肯定是把这k次操作全部丢到一个数上看看能不能凑出二进制下一个更高位的1. 因为k最大只有10,我们可以求出每一个数乘以k次之后的值, ...

  2. win平台搭建Lnmp环境

    win10上面安装的phpStudy这些天有时候打不开网页 502,请求一直loading,就算是代码问题我也扶不住,安装个Redis,mongodb都超级麻烦,并且好多都模拟Linux做的东西,最终 ...

  3. 《剑指offer》— JavaScript(10)矩形覆盖

    矩形覆盖 题目描述 我们可以用(2*1)的小矩形横着或者竖着去覆盖更大的矩形.请问用n个(2*1)的小矩形无重叠地覆盖一个(2*n)的大矩形,总共有多少种方法? 实现代码 function jumpF ...

  4. FindBugs错误修改指南 【转】

    FindBugs错误修改指南 1. EC_UNRELATED_TYPES Bug: Call to equals() comparing different types Pattern id: EC_ ...

  5. 「Linux」VMware安装centos7(一)

    1.点击:创建虚拟机 2.选择:自定义(高级),下一步 3.点击:下一步 4.选择:稍后安装操作系统,下一步 5.选择:操作系统和对应的版本,下一步 6.设置:虚拟机名称和安装位置,下一步 7.设置: ...

  6. #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

    原文 功能: 首先,sizeof(int)肯定是2的次方数,比如32位是4,64位是8 ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 的意思就 ...

  7. T25990 [Wind Festival]Running In The Sky

    T25990 [Wind Festival]Running In The Sky 题目背景 [Night - 20:02[Night−20:02 P.M.]P.M.] 夜空真美啊--但是--快要结束了 ...

  8. JAX-WS搭建WebService和客户端访问程序

    开发环境:myeclipse8.6+jdk1.6.0_29+tomcat6.0.37 XFire搭建webservice: http://www.cnblogs.com/gavinYang/p/352 ...

  9. poi复杂excel的实现

    一:前言 最近帮一个朋友做excel的导出功能,对于我来说还是挺头疼,我看了下表格样式,对于我来说还是挺头疼的,想当年耗子刚刚出社会的时候做的第一份工作,第一份任务就是把把word转换为html,在这 ...

  10. .net core 中 identity server 4 之术语

    id4的职责: 保护你的资源 通过本地 账户库(Account Store)或者外部身份提供其 认证用户 提供Session管理以及SSO 管理和认证客户端 发行身份及访问Token给客户端 验证To ...