EF 6 Code-First系列文章目录:数据库
在EF 6和EF Core中,数据注解中的ForeignKey特性,是用来在两个实体间配置外键关系。根据默认的约定,当属性的名称与相关实体的主键属性匹配时,EF将该属性做为外键属性。ForeignKey Signature: [ForeignKey(name string)]
name:相关联的导航属性的名称或者相关联的外键属性名称
看看下面实体间的一对多关系:app
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数据注解特性,能够有如下三种方式:测试
ForeignKey应用在依赖实体的外键属性上面,相关联的导航属性的名称做为ForeignKey的name参数传入:ui
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列了。
spa
ForeignKey特性能够应用在导航属性上面,而后name参数就指定外键属性列的名称:.net
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列了。翻译
ForeignKey特性能够应用在主体实体的导航属性上面,name参数就指定外键属性的名称:code
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特性,你们有什么不明白能够留言,感谢支持!htm