使用的例子为教室(ClassRoom),教室里的多媒体设备(Device),一个教室里有一套多媒体设备,一套多媒体设备只放在一个教室里。

1.Data Annotations方式

需要在任意一方的主键属性上加ForeignKey,以下是这两种方式的代码以及结果

方法一:

代码:

  1. public class Device
  2. {
  3. [Key, ForeignKey("ClassRoom")]
  4. public Guid ClassRoomId { get; set; }
  5.  
  6. public virtual ClassRoom ClassRoom { get; set; }
  7. public string Remark { get; set; }
  8. }
  1. public class ClassRoom
  2. {
  3. public Guid Id { get; set; }
  4. [ MaxLength()]
  5. public string Number { get; set; }
  6. public virtual Device Device { get; set; }
  7. public string Remark { get; set; }
  8. }

测试结果:

方法二:

代码:

  1. public class Device
  2. {
  3. public Guid Id { get; set; }
  4. public virtual ClassRoom ClassRoom { get; set; }
  5. public string Remark { get; set; }
  6. }
  1. public class ClassRoom
  2. {
  3. [Key, ForeignKey("Device")]
  4. public Guid DeviceId { get; set; }
  5. [ MaxLength()]
  6. public string Number { get; set; }
  7. public virtual Device Device { get; set; }
  8. public string Remark { get; set; }
  9. }

执行结果:

2.Fluent API方式

主要使用WithRequiredPrincipal以及WithRequiredDependent方法,前者属性会被另外的实体引用,后者将引用另外的实体。

方法一:

代码:

  1. public class ClassRoom
  2. {
  3. public Guid ClassRoomId { get; set; }
  4. [ MaxLength()]
  5. public string Number { get; set; }
  6. public virtual Device Device { get; set; }
  7. public string Remark { get; set; }
  8. }
  1. public class Device
  2. {
  3.  
  4. public Guid DeviceId { get; set; }
  5.  
  6. public virtual ClassRoom ClassRoom { get; set; }
  7. public string Remark { get; set; }
  8. }
  1. modelBuilder.Entity<ClassRoom>().HasRequired(t => t.Device).
  2. WithRequiredPrincipal(t => t.ClassRoom);

结果:

方法二:

代码:

两个类都是相同的,这里就不做展示了

  1. modelBuilder.Entity<ClassRoom>().HasRequired(t => t.Device).
  2. WithRequiredDependent(t => t.ClassRoom);

结果:

Entity Framework Code First 模式-建立一对一联系的更多相关文章

  1. Entity Framework Code First 模式-建立多对多联系

    Entity Framework 在建立多对多的联系时,会生成一个中间表,用来表示这个多对多的关系.这和数据库设计时从概念模型到逻辑模型转化时,多对多的关系不能和任何一端的实体合并,需要将关系也转化为 ...

  2. Entity Framework Code First 模式-建立一对多联系

    一.建立一对多联系 使用的例子为Product与Category,一个种类(Product)对应多个商品(Product) 1.外键列名默认约定 在“一”这边的实体增加一个集合属性(public vi ...

  3. Entity Framework Code First关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  4. Entity Framework Code First (三)Data Annotations

    Entity Framework Code First 利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己的 domain classes 来表 ...

  5. Entity Framework Code First (二)Custom Conventions

    ---------------------------------------------------------------------------------------------------- ...

  6. Entity Framework Code First 映射继承关系

    转载 http://www.th7.cn/Program/net/201301/122153.shtml Code First如何处理类之间的继承关系.Entity Framework Code Fi ...

  7. Entity Framework Code First主外键关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  8. 使用 Entity Framework Code First

    使用 Entity Framework Code First 在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧.在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码 ...

  9. Entity Framework Code first(转载)

    一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...

随机推荐

  1. 安装JDK9之后eclipse无法启动问题解决办法

    操作系统:MAC OS JDK:1.8.0_131 eclipse:官网最新版 安装jdk的过程很简单,从官网下载之后依次点击就可以了,在终端输入:java -version 可以看到安装后的版本信息 ...

  2. mysql中的Date日期格式的问题:只有日期没有时间及格式化时间

    只有日期没有时间,把xml中的date改为timestamp 格式化最简单的方法:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", time ...

  3. (转)sql的group by应用

    转载于:http://www.studyofnet.com/news/247.html 本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建 ...

  4. sklearn 调用逻辑回归函数训练数据时出现 “unknown label type:unknown”

    problemsolution:

  5. 活动:新春第一次送书,价值78元 X 3本

    新春第一次送书活动,送出3本重量级书籍<深入分布式缓存:从原理到实践>. 作者介绍: 于君泽:蚂蚁金服高级技术专家.花名右军,IT从业超过十五年.对高并发.分布式架构.内建质量.研发管理有 ...

  6. HDU 3308 线段树求区间最长连续上升子序列长度

    题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值 #include <bits/stdc++.h> #define N 100005 us ...

  7. mysql UDF提权 sys_bineval

    介绍: 执行shellcode – sys_bineval sqmapl自带udf.dll中存在函数’sys_bineval,执行shellcode – sys_bineval 利用: MSF生成sh ...

  8. Got permission denied while trying to connect to the Docker daemon

    答案:https://stackoverflow.com/questions/48568172/docker-sock-permission-denied

  9. cordova 插件发布到 npm

    cordova 插件发布到 npm Cordova插件开发(3)- 将Cordova插件发布到npm could not find an installed version of gradle eit ...

  10. RabbitMQ探索之路(二):RabbitMQ在Linux下的安装

    引言 消息队列现在在互联网项目中应用的还是非常多的,在接下来的博客中小编会深入的了解MQ的实现过程,在此博客中将介绍如何在centos7下面安装MQ以及遇到的问题. 第一步:安装Erlang 因为ra ...