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. js 判断鼠标进去方向

    function fx(id){ var obj= document.getElementById(id); var fun=function(e){ var w=obj.offsetWidth; v ...

  2. Win10主题打不开,自动弹出桌面图标设置

    把官方下载的主题文件扩展名改成.deskthemepack,然后双击主题文件就可以正常使用了.

  3. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  4. 服务器设置SSH 长连接

    1.echo $TMOUT 如果显示空白,表示没有设置, 等于使用默认值0, 一般情况下应该是不超时. 如果大于0, 可以在如/etc/profile之类文件中设置它为0. 2.修改/etc/ssh/ ...

  5. 报错:No package erlang available

    问题 yum install erlang 报错:No package erlang available 同样的,如果我们在安装nginx的时候出现"No package nginx ava ...

  6. ubuntu14.04 archive sources.list

    deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse deb http://archive. ...

  7. JQ引用

    <script type="text/javascript" src="http://files.cnblogs.com/914556495wxkj/jquery- ...

  8. poj 2488

    http://poj.org/problem?id=2488 题意:就是让马把棋盘都走完,每一个点都要走到,出口就是a,b. #include <stdio.h> #include < ...

  9. [转]Git远程操作详解

    原文:http://www.ruanyifeng.com/blog/2014/06/git_remote.html Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多 ...

  10. java转换json需要导入的jar包,org/apache/commons/lang/exception/NestableRuntimeException

    缺少相应jar包都会有异常,根据异常找jar包导入......     这里我说下lang包,因为这个包我找了好半天:   我用的是: commons-lang3-3.1.jar  出现异常: jav ...