对于主外键约定的理解,其实是学习实体间一对一和一对多关系的基础。

1.1 主键(Key)约定

主键的默认约定是:只要字段名为--实体名(类名)+"id"(不区分大小写),这就算是默认的主键约定。

如果要显示标识的话,就使用特性标签进行标识:

public class Student
{
[Key]
public int StudentKey { get; set; }
public string StudentName { get; set; }
}

这样标识的主键,在数据库的名称就是StudentKey

2.1 外键(ForeignKey)约定

外键约定稍微复杂一些,主要分为三种形式的显示指定外键和默认的外键约定。在一对一关系中比较简单,在一对多关系中约定规则多一些。

2.1.1 一对一关系中的外键约定

在文档中,这种叫做One-to-Zero-or-One Relationship,这种关系必须手动指定主从表,因为在一个一对一关系中,系统是没法推测出来谁是主表谁是从表的,而且因为从表的主键也是主表的主键,也是从表的外键,所以没有必要和多对多关系那样,指定一个字段作为外键,或者为外键设置一个友好字段名,这些都是不需要的。

EF中的一对一关系实现如下:

 public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; } public virtual StudentAddress Address { get; set; }
} public class StudentAddress
{
[ForeignKey("Student")]
public int StudentAddressId { get; set; } public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; } public virtual Student Student { get; set; }
}

2.1.2 一对一关系的Fluent API实现

欠着

2.2.1 一对多关系中的外键约定

默认约定:

默认约定,只需要两个导航属性就能实现,student中会根据两个表名,把standard表的主键作为student的外键生成一个长名。

 public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
//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; }
}

当然如果觉得系统生成的名称不友好,我们可以自己设置外键的名字,其中默认的配置规则是entity中如果有字段是导航属性的名称+id(不区分大小写),即把这个字段设置成外键。

显示指定

当然我们可以使用特性标签[ForeignKey]来指定某个字段作为外键:

    [ForeignKey("Standard")]
public int StandardRefId { get; set; }

这样的话,外键名称就叫StandardRefId。

我们也可以把标签属性放在导航属性,指定某个字段作为被特性标签修饰的导航属性在当前实体的外键。

    [ForeignKey("StandardRefId")]
public Standard Standard { get; set; }

最后一种,我们可以在主表的导航属性上,也就是字表的ICollection集合上,用特性标签指定外键:

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

EF Code First中的主外键约定和一对一、一对多关系的实现的更多相关文章

  1. EF Code First 导航属性 与外键(转载)

    EF Code First 导航属性 与外键 一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就 ...

  2. EF Code First 导航属性 与外键

    一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之间的 ...

  3. SQL SERVER中获取表间主外键关系

    sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...

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

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

  5. netcore2.0 ORM框架中如何配置自定义的主外键加载

    环境:netcore2.0 DB :mysql ORM:Ant https://github.com/yuzd/AntData.ORM/tree/netcore2 [给我一个star吧] NUGET: ...

  6. 批量删除MSSQL 中主外键约束

    转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除 ...

  7. 通过SQL脚本来查询SQLServer 中主外键关系

    在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...

  8. Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)

    有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...

  9. 清除oracl中有主外键关联的表中的部分数据。

    1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ...

随机推荐

  1. JSP连接access数据库

    一个用jsp连接Access数据库的代码. 要正确的使用这段代码,你需要首先在Access数据库里创建一username表,表里面创建两个字符型的字段,字段名分别为:uid,pwd,然后插入几条测试数 ...

  2. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十六)

    到目前为止,选手跑到终点时仿佛没什么激动人心的事情发生呢?貌似需要添加一些胜利的特效啊! 前面说好的不添加特效,只完成游戏功能的诺言呢? T T 我们主要想实现这样一个特效效果: 1.胜利的玩家突出显 ...

  3. (NO.00001)iOS游戏SpeedBoy Lite成形记(七)

    因为我们之前在GameScene中建立的2个数组,分别为player和label的数组.大家可以注意到其中每个元素是一一对应的. 知道了这层关系,我们尝试来更新matchRun方法: CCAction ...

  4. 【一天一道LeetCode】#46. Permutations

    一天一道LeetCode系列 (一)题目 Given a collection of distinct numbers, return all possible permutations. For e ...

  5. Mac下ImageMagick安装(libpng)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/42562705 ...

  6. 关于React Native 报Export declarations are not supported by current JavaScript version错误的解决问题

    设置.js文件默认以jsx的语法打开 在没有进行设置的情况下,每次打开WebStorm的时候打开包含jsx语法的.js文件都会有以下提示: 当然我们点击转换后就可以了,但是每次都会提示,所以还是来一个 ...

  7. android 开源图表库MPChart最简单使用方法示例教程Demo--折线图 柱状图

    转载请注明本文出处:http://blog.csdn.net/wingichoy/article/details/50428246 MPChart是android上一款强大的图表开源库,他可以轻松的绘 ...

  8. 【翻译】在Sencha Touch中创建离线/在线代理

    原文:Creating an Online/Offline proxy in Sencha Touch 概述 在Sencha Touch中,一个常见的需求就是,当设备在没有连接互联网的时候,应用程序必 ...

  9. C语言中sizeof与strlen区别

    本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...

  10. saiku中文查询(鉴于有人提问:saiku执行mdx,有中文报错)

    有人问我saiku的中文查询问题: saiku默认执行英文,很多人,在mysql里录入了中文,使用sql语言查询没有问题. 可是,用saiku的mdx查询,就会报错. 这是因为mysql默认支持中文查 ...