博客推荐

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. ASP.NET快速开发框架不得不做的几个功能、高大上档次后台管理UI界面

    俗话说磨刀不误砍柴工,确实,一早上花一个小时去磨刀一天下来肯定能多砍很多柴.我们做软件开发也是同样的道理,有套好开发框架在手里,开发也是事半功倍.那么一套MVC快速开发框架至少得具有哪些功能才能帮我们 ...

  2. Spring Boot、微服务架构和大数据

    一文读懂 Spring Boot.微服务架构和大数据治理三者之间的故事 https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶 ...

  3. 81.Ext TreePanel实现单选等功能

    转自:https://blog.csdn.net/iteye_7988/article/details/81886654 在ext1.x里,树是没有checkbox的, 幸好在2.X版本里提供了这个功 ...

  4. E20170906-mk

    portrait   n. 肖像,肖像画; 模型,标本; 半身雕塑像; 人物描写; orientation  n. 方向,定位,取向,排列方向; 任职培训; (外交等的) 方针[态度]的确定; 环境判 ...

  5. mvc.global.asax事件

    1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成 ...

  6. MySQL数据库中的delete语句

    在MySQL数据库中,只有在数据存在的情况下删除,才会返回受影响的行数.比如大于0的数,如果删除了不存在的数据,则会返回0:

  7. php实时推送系统消息给客户端

    在我们实际开发过程中,有些数据需要实时获取:比如erp系统中的订单信息,OA系统中的流程审批等都需要及时处理,这时我们就不能再使用http协议了:当然也可以使用轮询的机制.但是轮询请求中有大半是无用, ...

  8. SQL Server 一个简单的游标

    先看一下原表: DECLARE @id INT; DECLARE @name NVARCHAR(100); DECLARE c_department CURSOR FOR SELECT StuID, ...

  9. CMMI评估流程

    原文链接:http://www.cmmcn.com/new/cmmi-105.html 当前位置:首页 >> CMMI知识库 >> CMMI相关 >> CMMI评估 ...

  10. php 加密解密函数封装

    算法一: //加密函数 function lock_url($txt,$key='yang') { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi ...