针对关系型数据库来说,需要明了每个对象之间的关系。

它们之间的关系有:

1、一对一(1:1):一个学生只能拥有一张身份证,一张身份证只能属于一个学生;

2、一对多(1:N):一个学生可以拥有几本书,而这些书都属于该学生所有;

3、多对多(N:M):一个学生可以选择多名教师,一个教师可以选择多名学生。

本篇文章要浅述的是一对一的关系。

一、创建

让我们先来创建一个学生类和一个身份证类,如下代码:

学生类:

    public class Student {
public Guid ID { get; set; }
public string Name { get; set; }
public Nullable<DateTime> BirthDay { get; set; }
public Nullable<int> Age { get; set; }
}

由于在实际项目中,Student类早就被创建好了。因此我们不用动该类任何代码。我们只管新建的身份证类。

身份证类:

   public class IdentificationCard {
public string CardID { get; set; }
public bool IsExpire { get; set; }
//加上virtual,首先加载CarteenCard,再次延迟加载Student
public virtual Student Student { get; set; }
}

在新建的身份证类中加上一个Student类型的虚属性即可。

接下来我们再创建一个身份证类的实体类型配置,该类型配置代码在创建身份证表的时候起着一个约束和约定的作用。代码如下:

using Model;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace DAL.Map {
public class IdentificationCardMap:EntityTypeConfiguration<IdentificationCard> {
public IdentificationCardMap() {
HasKey(x=>x.CardID);
HasRequired(x => x.Student).WithOptional();
}
}
}

首先我们需要指明该身份证类型映射到数据表的主键。

接着重点来了,HasRequired(x=>x.Student)这个代码说的是,在身份证表中要求Student信息是必须的,你Student表那边派一个主键过来当人质就行,不要跑哈,必须在位,我们可是经常要查岗的哟,于是身份证表中就会创建一个与Student表主键对应的外键,且该外键非空。接下来的WithOptional()意为针对Student表来说,该身份证为可选项,由于我们没有给WithOptional输入任何参数,因此在Student表中就不会生成与身份证表相关的任何字段,Student表还是原来的Student表。

创建的身份证表为:

二、使用

做了上面那些工作,无非就是在使用的时候方便一些。使用代码如下:

新增:

using (DemoContext context = new DemoContext()) {
Student stu = new Student {
Name = "赵子成",
BirthDay = DateTime.Parse("1990-08-01"),
Age =
}; IdentificationCard card = new IdentificationCard {
CardID = "52xxxxxxxxxxxxxx09",
IsExpire = false,
Student = stu }; context.IdentificationCards.Add(card);
context.SaveChanges();
}

新增结果:

查询:

                //Find方法:以主键为参数
IdentificationCard card = context.IdentificationCards.Find("52xxxxxxxxxxxxxx09");
Console.WriteLine("{0} {1} {2} {3}",card.CardID,card.IsExpire,card.Student.ID,card.Student.Name);

查询结果:

EF-一对一关系的更多相关文章

  1. EF——一对一、一对多、多对多关系的配置和级联删除 04(转)

    EF里一对一.一对多.多对多关系的配置和级联删除   本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个P ...

  2. EF Core 2.1 支持数据库一对一关系

    在使用EF Core和设计数据库的时候,通常一对多.多对多关系使用得比较多,但是一对一关系使用得就比较少了.最近我发现实际上EF Core很好地支持了数据库的一对一关系. 数据库 我们先来看看SQL ...

  3. EntityFramework之一对一关系(二)

    前言 关于表关系园中文章也是数不胜收,但是个人觉得最难攻克的是一对一,对其配置并非无道理可循,只要掌握了原理方可,且听我娓娓道来! 共享主键关系 概念:就是两个表共享相同的主键值,也就是说一表的主键值 ...

  4. EF CodeFirst 关系配置

    自从开始学习asp.net mvc采用code first以来,关系配置就没有搞清楚过!(⊙﹏⊙)b 笔记之前先感谢以下文章和博主,对他们表示崇拜,由浅入深.举例恰当.拨云见日.茅塞顿开,还有什么词, ...

  5. Entity Framework - 理清关系 - 基于外键关联的单向一对一关系

      注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...

  6. EF 一对一、一对多、多对多配置语句小记

    数据库实体间的关系无非有这么几种:一对一.一对多.多对多,这些关系在EF框架中分别有不同的创建方式: 1.在"Database First"模式中,这些关系通过SQL语句的方式建立 ...

  7. Entity Framework管理实体关系(一):管理一对一关系

    我们现在已经知道如何使用Code First来定义简单的领域类,并且如何使用DbContext类来执行数据库操作.现在我们来看下数据库理论中的多样性关系,我们会使用Code First来实现下面的几种 ...

  8. 问题记录:EntityFramework 一对一关系映射

    EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher { public int Id { get; set; } ...

  9. 9.Configure One-to-One(配置一对一关系)【Code-First系列】

    现在,开始学习怎么配置一对一的关系,众所周知,一对一的关系是:一个表中的主键,在另外一个表中,同时是主键和外键[实际上是一对零或者一对一]. 请注意:一对一的关系,在MS SQL Server中,技术 ...

  10. hibernate(五) hibernate一对一关系映射详解

    序言 之前讲解了一对多(单向.双向).多对多(双向),今天就讲解一下最后一个关系,一对一. 心情不错.状态也挺好的,赶紧写一篇博文造福一下大家把. --WH 一.一对一关系的概述 一对一关系看起来简单 ...

随机推荐

  1. boostrapt的二级下拉菜单

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta conte ...

  2. ace后台管理系统扁平化框架

    Bootstrap ACE后台管理界面模板(扁平化) 所属分类:后台模板 文件大小:1.22 MB 阅读:236697次 下载:55929次 来源:www.daimajiayuan.com 分享到:更 ...

  3. xpath是什么(入门教程)

    xpath是什么(入门教程) 一.总结 一句话总结:一句话,XPath 是一门在 XML 文档中查找信息的语言.简单来说,html类似于xml结构,但是没有xml格式那么严格. 在xml中查找信息 包 ...

  4. tchart2

  5. 混合线性模型(linear mixed models)

    一般线性模型.混合线性模型.广义线性模型 广义线性模型GLM很简单,举个例子,药物的疗效和服用药物的剂量有关.这个相关性可能是多种多样的,可能是简单线性关系(发烧时吃一片药退烧0.1度,两片药退烧0. ...

  6. Vue音乐项目笔记(三)

    1. 音乐播放前进后退的实现   https://blog.csdn.net/weixin_40814356/article/details/80379606 2. 音乐进度条实现(单独一个组件) h ...

  7. P2469 [SDOI2010]星际竞速

    在何Au的讲解下终于搞明白了这个以前的坑. 首先考虑最小路径覆盖. 这个题意又要求我们求出的最大流为n-1(这样才能保证路径为1条) 考虑高速航行模式的图怎么建,只需要保证最大流的同时费用最小即可,显 ...

  8. Matlab-8:松弛迭代法(SOR)

    function [x,n,flag]=sor(A,b,eps,M,max1) %sor函数为用松弛迭代法求解线性方程组 %A为线性方程组的系数矩阵 %b为线性方程组的常数向量 %eps为精度要求 % ...

  9. poj-2142-exgcd/解的和最小

    The Balance Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8816   Accepted: 3833 Descr ...

  10. logmnr使用

    logminer 工具的使用 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体 ...