原文链接:https://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx

EF 6 Code-First系列文章目录:

在EF 6和EF Core中,数据注解中的ForeignKey特性,是用来在两个实体间配置外键关系。根据默认的约定,当属性的名称与相关实体的主键属性匹配时,EF将该属性作为外键属性。ForeignKey Signature: [ForeignKey(name string)]
name:相关联的导航属性的名称或者相关联的外键属性名称
看看下面实体间的一对多关系:

using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; } //Foreign key for Standard
public int StandardId { get; set; }
public Standard Standard { get; set; }
} public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; } public ICollection<Student> Students { get; set; }
}

上面的代码例子中,描述了Student和Standard实体中的一对多关系。为了解释一对多关系,Student类包含了一个StandardId属性还有一个引用类型的属性Standard,并且Standard实体包含了一个集合类型的导航属性Students,Student实体中的StandardId属性匹配上了Standard实体中的主键属性名称StandardId,所以Student实体中的StandardId属性将会自动变成外键属性,并在数据表中生成外键:

ForeignKey特性重写了默认的外键约定,他允许我们在依赖实体中【这里是Student】指定外键属性,这个指定的外键属性名称,不需要匹配主体实体【这里是Standard】中的主键属性名称。
使用ForeignKey数据注解特性,可以有以下三种方式:

  1. [ForeignKey(NavigationPropertyName)]应用在依赖实体的外键标量属性上面,ForeignKey里面的name参数,填写导航属性的名称
  2. [ForeignKey(ForeignKeyPropertyName)]应用在依赖实体的导航属性上面,ForeignKey里面的name参数,填写外键属性的名称
  3. [ForeignKey(ForeignKeyPropertyName)]应用在主体实体的导航属性上面,ForeignKey里面的name参数,填写外键属性的名称

1.[ForeignKey] on the foreign key property in the dependent entity

ForeignKey应用在依赖实体的外键属性上面,相关联的导航属性的名称作为ForeignKey的name参数传入:

using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; } [ForeignKey("Standard")]
public int StandardRefId { get; set; }
public Standard Standard { get; set; }
} public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; } public ICollection<Student> Students { get; set; }
}

在上面的例子中,ForeignKey特性应用于StandardRefId属性上,并且传入导航属性的名称Standard到name参数上,这样就会在Students表中创建一个外键列StandardRefId,这样就不会生成默认的StandardID列了。

2.[ForeignKey] on the navigation property in the dependent entity

ForeignKey特性可以应用在导航属性上面,然后name参数就指定外键属性列的名称:

using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; } public int StandardRefId { get; set; } [ForeignKey("StandardRefId")]
public Standard Standard { get; set; }
} public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; } public ICollection<Student> Students { get; set; }
}

在上面的例子中,ForeignKey特性应用在Standard导航属性上面,name参数就是外键属性的名称StandardRefId,这样就会在Students数据表中,生成一个StandardRefId外键列,就不会生成默认的StandardId列了。

3.[ForeignKey] on the navigation property in the principal entity

ForeignKey特性可以应用在主体实体的导航属性上面,name参数就指定外键属性的名称:

using System.ComponentModel.DataAnnotations.Schema;

public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; } public int StandardRefId { get; set; }
public Standard Standard { get; set; }
} public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; } [ForeignKey("StandardRefId")]
public ICollection<Student> Students { get; set; }
}

在上面的例子中,ForeignKey特性应用于主体实体Standard中的导航属性Students上,这样同样会在Students表中创建一个外键列StandardRefId.
好了,以上就是数据注解之ForeignKey特性,大家有什么不明白可以留言,感谢支持!

9.5 翻译系列:数据注解之ForeignKey特性【EF 6 Code-First系列】的更多相关文章

  1. 9.6 翻译系列:数据注解之Index特性【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/entityframework6/index-attribute-in-code-first.aspx EF ...

  2. 9.2 翻译系列:数据注解特性之---Column【EF 6 Code First系列】

    原文链接:http://www.entityframeworktutorial.net/code-first/column-dataannotations-attribute-in-code-firs ...

  3. 1 翻译系列:什么是Code First(EF 6 Code First 系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/what-is-code-first.aspx EF 6 Code-First系列文章目录 ...

  4. 7.2 数据注解属性--TimeStamp特性【Code-First 系列】

    TimeStamp特性可以应用到领域类中,只有一个字节数组的属性上面,这个特性,给列设定的是tiemStamp类型.在并发的检查中,Code-First会自动使用这个TimeStamp类型的字段. 下 ...

  5. 9.10 翻译系列:EF数据注解特性之StringLength【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/stringlength-dataannotations-attribute-in-co ...

  6. 9.9 翻译系列:数据注解特性之--MaxLength 【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/maxlength-minlength-dataannotations-attribut ...

  7. 9.7 翻译系列:EF数据注解特性之--InverseProperty【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in ...

  8. 9.3 翻译系列:数据注解特性之Key【EF 6 Code-First 系列】

    原文链接:http://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.a ...

  9. 9.翻译系列:EF 6以及EF Core中的数据注解特性(EF 6 Code-First系列)

    原文地址:http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx EF 6 Code-F ...

随机推荐

  1. 让我们了解 Ceph 分布式存储

    前言 最近在学习 kubernetes 过程中,想实现 pod 数据的持久化.在调研的过程中,发现 ceph 在最近几年发展火热,也有很多案例落地企业.在选型方面,个人更加倾向于社区火热的项目,Glu ...

  2. BZOJ1195 [HNOI2006]最短母串 AC自动机 bfs

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1195 题意概括 给出一堆串,然后求一个包含这些串的所有串的最短的中的字典序最小的. 题解 先造一个AC ...

  3. 《Gradle权威指南》--Gradle构建脚本基础

    No1: 设置文件默认名是setting.gradle,放在根目录下,大多数作用都是为了配置子工程 No2: 一个Project包含很多个Task.Task就是一个操作,一个原子性的操作.其实它是Pr ...

  4. Web大前端面试题-Day9

    1. 请用至少3中方式实现数组去重? 方法一: indexOfvar arr1=[1,2,3,4,5,4,3,2,1];  function repeat1(arr){    for(var i=0, ...

  5. JFreeChart 之柱状图

    JFreeChart 之柱状图 一.JFreeChart 简介 JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets ...

  6. Postman使用记录

    1. 情况: 当 本地需要测试,线上的项目也需要同时测试时,地址了输入还需要打开多个窗口,麻烦 点击圆圈部分 testForm是我新建的 输入请求的action名字 点击齿轮按钮: 地址栏填入方式: ...

  7. Vue插件写、用详解(附demo)

    出处http://blog.csdn.net/qq20004604 Vue插件 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共 ...

  8. 集合(1)—List接口的实现类ArrayList

    List List接口是Collection接口的子接口,从其名称可以看出,是一个元素有序(并不是按大小排序,具有顺序索引,类似于数组),默认按照元素的添加顺序设置元素的索引. List用法 List ...

  9. c# pictureBox1.Image的获得图片路径的三种方法 winform

    代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径:this.pictureBox2.Image=Image.FromFile("D:\ ...

  10. 哪个中年IT男不是一边面对危机,一边咬牙硬抗

    本文转自:https://www.cnblogs.com/gossip/p/8297294.html 对于 2017 年年末那则令人哀伤的消息,相信很多同龄人都会触目伤怀.面对公司的强制性劝退,深圳中 ...