博客推荐

http://www.cnblogs.com/Gyoung/archive/2013/01/17/2864150.html

先学习下这几个方法

Has方法:

HasOptional:前者包含后者一个实例或者为null

HasRequired:前者(A)包含后者(B)一个不为null的实例

HasMany:前者包含后者实例的集合

With方法:

WithOptional:后者(B)可以包含前者(A)一个实例或者null

WithRequired:后者包含前者一个不为null的实例

WithMany:后者包含前者实例的集合

一对一关系

建立一对一表关系的逻辑:A的外键是B的主键,不是单独定义的B中的字段

public class Student{
public in Id {get;set;}
public virtual Teacher Teacher {get;set;}
}
public class Teacher{
[Key ,ForeignKey("Student")]]
public int Id{get;set;}
public virtual Student Student {get;set;}
}
//这个ForeignKey的属性还挺不好理解的,正向理解就挺简单的:下面的这个id作为表Student的外键
//如果这样写
public int DestinationId { get; set; }
[ForeignKey("DestinationId")]
public Destination Destination { get; set; }
//就表示,下面的表的外键是本表的DestinationId
//分析下两种语法,一种是下面的表的外键是括号中的字段,上一种语法是下面的id是是括号中表的外键
//这种属性怎么能写这么复杂?可能是考虑到易用性吧,真灵活,正常人还是会用Fluent AP这种符合人的思维的语法
//上面的是用Data Annotations表示法,下面用Fluent API表示法展示一下
Teacher.HasRequired(a =>a.Student).WithOptional(a=>a.Teacher);

一对多的关系

public class Student{
public in Id {get;set;}
public virtual Teacher Teacher {get;set;}
}
public class Teacher{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Equipment()
{
Students= new HashSet<Student>();
}
public int Id{get;set;}
public virtual ICollection<Student> Students {get;set;}
}
//在OnModelCreating方法中定义
modelBuilder.Entity<Teacher>()
.HasMany(e => e.Students )
.WithRequired(e => e.Teacher )
.WillCascadeOnDelete(true); // 设置级联删除

多对多的关系

public class Student{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Student()
{
Teachers= new HashSet<Teacher>();
}
public in Id {get;set;}
public virtual ICollection<Teacher> Teachers {get;set;}
}
public class Teacher{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Teacher()
{
Students= new HashSet<Student>();
}
public int Id{get;set;}
public virtual ICollection<Student> Students {get;set;}
}
//在OnModelCreating方法中定义
modelBuilder.Entity<Teacher>()
.HasMany(e => e.Students )
.WithMany(e => e.Teachers )
.WillCascadeOnDelete(true); // 设置级联删除

asp.net-EF-表间关系的更多相关文章

  1. EF简易教程,从建表到表间关系

    唐大兵博客 唐大兵的博客里记录了EF Code First从建表到表之间关系的详细内容. 汪杰的博客(EF里一对一.一对多.多对多关系的配置和级联删除) 汪杰的博客更简洁,但不够充实,读懂了唐大兵博客 ...

  2. Node.js ORM框架Sequlize之表间关系

    Sequelize模型之间存在关联关系,这些关系代表了数据库中对应表之间的主/外键关系.基于模型关系可以实现关联表之间的连接查询.更新.删除等操作.本文将通过一个示例,介绍模型的定义,创建模型关联关系 ...

  3. Hibernate第三天——表间关系与级联操作

    第三天,我们来使用Hibernate进行表之间一对多 多对多关系的操作: 这里我们先利用两个例子进行表关系的回顾: 一对多(重点): 例如分类和商品的关系,一个分类多个商品,一个商品属于一个分类 CR ...

  4. 自增特性,外键,级联更新与级联删除,表间关系,SELECT用法,GROUP BY

    自增特性 自动增长的作用: 问题:为数据表设置主键约束后,每次插入记录时,如果插入的值已经存在,会插入失败. 如何解决:为主键生成自动增长的值. 自动增长的语法: 字段名 数据类型 AUTO_INCR ...

  5. MicroERP开发技术分享:vsFlexGrid、scriptControl实现工资表自定义列与表间关系计算

    开发大型的MIS系统,肯定是离不开第三方控件的,同时也要根据项目需要自己写几个. MicroERP共用了以下几个控件: 第三方商业控件: vsFlexGrid:大名鼎鼎的表格控件,不用多说,配合vsP ...

  6. Rhythmk 学习 Hibernate 05 - Hibernate 表间关系 [ManyToOne,OneToMany]

    1.项目结构: 1.1.场景说明: 一个订单,包含多个产品 1.2.类文件: Order.java package com.rhythmk.model; import java.util.Date; ...

  7. Rhythmk 学习 Hibernate 06 - Hibernate 表间关系 [One To One]

    1.One To One 单相 背景: 古代一个老婆  只能关联一个老公 husband.java package com.rhythmk.model; public class husband { ...

  8. sql语句之表间字段值复制遇到的一些问题--基于mysql

    好久没来园子了,转眼2017已经到3月份了,前段时间一直忙没时间写博客(其实是自己懒),感觉内心好惭愧.昨天临下班前,技术老大突然对我说要改下表结构,问我能不能实现将一个表的字段值复制到另外一个表的某 ...

  9. Django 的ORM 表间操作

    Django之ORM表间操作   之前完成了简单的数据库数据增加操作.这次学习更多的表间操作. 单表操作 增加 方式一 b = Book(title="Python基础", pub ...

  10. ASP.NET EF实体主外键关系

    其他解释 https://www.cnblogs.com/wuhenke/archive/2010/08/11/1797307.html 主键.外键 需要删除完外键表才能删除主键表 一对一关系peop ...

随机推荐

  1. 背包问题的方案总数 P1474 货币系统

    背包问题的方案总数 对于一个给定了背包容量.物品费用.物品间相互关系(分组.依赖等)的背包问题,除了再给定每个物品的价值后求可得到的最大价值外,还可以得到装满背包或将背包装至某一指定容量的方案总数. ...

  2. 杂项:MIS(管理信息系统)

    ylbtech-杂项:MIS(管理信息系统) 管理信息系统(Management Information System,简称MIS)是一个以人为主导,利用计算机硬件.软件.网络通信设备以及其他办公设备 ...

  3. VS2010中文注释带红色下划线的解决方法

    环境:Visual Studio 2010 问题:代码中出现中文后会带下划线,很多时候感觉很不舒服.找了很久的原因没找到,后来无意中在VisualAssist X里找到了解决办法. 1.安装完Visu ...

  4. (Go)07.Go语言中strings和strconv包示例代码详解02

    1.strings使用 统计字符串出现次数 strings.Count(s string, substr string) int Count 用于计算字符串 substr 在字符串 s 中出现的非重叠 ...

  5. vs2008bin下Debug bll Release文件 obj下的Debug bll Release文件区别

    Bin目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Re ...

  6. (转)JavaScript深入之从原型到原型链

    构造函数创建对象 我们先使用构造函数创建一个对象: function Person() { } var person = new Person(); person.name = 'Kevin'; co ...

  7. Electron结合React开发环境遇到的问题

    链接 将create-react-app与electron集成在了一个项目中.但是在React中无法使用electron 当在React中使用require('electron')时就会报TypeEr ...

  8. 2013款MacBook Air装Windows7单系统

    经过两天的摸索,查找无数资料终于把2013款的MacBook Air装上了WIN 7,虽然网上有很多的资料但是都不是我想要的,第一个我的是2013款的MacBook Air,跟原来2012 11款Ma ...

  9. ROS:Nvidia Jetson TK1开发平台

    原文链接: http://wiki.ros.org/NvidiaJetsonTK1 1. Nvidia Jetson TK1 Jetson TK1 comes pre-installed with L ...

  10. Spring MVC 中的基于注解的 Controller(转载)

           终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法 ...