asp.net-EF-表间关系
博客推荐
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-表间关系的更多相关文章
- EF简易教程,从建表到表间关系
		
唐大兵博客 唐大兵的博客里记录了EF Code First从建表到表之间关系的详细内容. 汪杰的博客(EF里一对一.一对多.多对多关系的配置和级联删除) 汪杰的博客更简洁,但不够充实,读懂了唐大兵博客 ...
 - Node.js ORM框架Sequlize之表间关系
		
Sequelize模型之间存在关联关系,这些关系代表了数据库中对应表之间的主/外键关系.基于模型关系可以实现关联表之间的连接查询.更新.删除等操作.本文将通过一个示例,介绍模型的定义,创建模型关联关系 ...
 - Hibernate第三天——表间关系与级联操作
		
第三天,我们来使用Hibernate进行表之间一对多 多对多关系的操作: 这里我们先利用两个例子进行表关系的回顾: 一对多(重点): 例如分类和商品的关系,一个分类多个商品,一个商品属于一个分类 CR ...
 - 自增特性,外键,级联更新与级联删除,表间关系,SELECT用法,GROUP BY
		
自增特性 自动增长的作用: 问题:为数据表设置主键约束后,每次插入记录时,如果插入的值已经存在,会插入失败. 如何解决:为主键生成自动增长的值. 自动增长的语法: 字段名 数据类型 AUTO_INCR ...
 - MicroERP开发技术分享:vsFlexGrid、scriptControl实现工资表自定义列与表间关系计算
		
开发大型的MIS系统,肯定是离不开第三方控件的,同时也要根据项目需要自己写几个. MicroERP共用了以下几个控件: 第三方商业控件: vsFlexGrid:大名鼎鼎的表格控件,不用多说,配合vsP ...
 - Rhythmk 学习 Hibernate 05 - Hibernate 表间关系  [ManyToOne,OneToMany]
		
1.项目结构: 1.1.场景说明: 一个订单,包含多个产品 1.2.类文件: Order.java package com.rhythmk.model; import java.util.Date; ...
 - Rhythmk 学习 Hibernate 06 - Hibernate 表间关系 [One To One]
		
1.One To One 单相 背景: 古代一个老婆 只能关联一个老公 husband.java package com.rhythmk.model; public class husband { ...
 - sql语句之表间字段值复制遇到的一些问题--基于mysql
		
好久没来园子了,转眼2017已经到3月份了,前段时间一直忙没时间写博客(其实是自己懒),感觉内心好惭愧.昨天临下班前,技术老大突然对我说要改下表结构,问我能不能实现将一个表的字段值复制到另外一个表的某 ...
 - Django 的ORM 表间操作
		
Django之ORM表间操作 之前完成了简单的数据库数据增加操作.这次学习更多的表间操作. 单表操作 增加 方式一 b = Book(title="Python基础", pub ...
 - ASP.NET EF实体主外键关系
		
其他解释 https://www.cnblogs.com/wuhenke/archive/2010/08/11/1797307.html 主键.外键 需要删除完外键表才能删除主键表 一对一关系peop ...
 
随机推荐
- tflearn中计算混淆矩阵方法——需要经过一步转换
			
def do_rnn_wordbag(trainX, testX, trainY, testY): y_test=testY #trainX = pad_sequences(trainX, maxle ...
 - bzoj 1093 [ ZJOI 2007 ] 最大半连通子图 —— 拓扑+DP
			
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1093 先缩点,然后就是找最长链,DP一下即可: 注意缩点后的重边!会导致重复计算答案. 代码 ...
 - C# Task 源代码阅读(2)
			
上篇已经讲到Task 的默认的TaskScheduler 为ThreadPoolTaskScheduler. 这时我们回到原来的task 的start方法,在代码最后,调用了 ScheduleAndS ...
 - 83.个人信息维护页面 Extjs 页面
			
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" ...
 - HDU3085 Nightmare Ⅱ
			
题目: Last night, little erriyue had a horrible nightmare. He dreamed that he and his girl friend were ...
 - Jmeter_Beanshell解析并提取json响应
			
1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...
 - Oracle配置说明
			
当Oracle安装完成后,为后续能够顺利得导出空表,特做一下配置(重点关注2.1) 1.1.查询空表select table_name from user_tables where NUM_ROWS= ...
 - BZOJ 2084 二分+hash OR Manacher
			
思路: 二分+哈希 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...
 - DOM 介绍
			
什么时DOM DOM:文档对象模型.DOM为文档提供了结构化表示,并定义了如何通过脚本来范文文档结构.目的起始就是为了能让js操作html元素而指定的一个规范. DOM就是由节点组成的. 解析过程 H ...
 - 5.30dao-service-controller层,mybatis自动生成。(获取根据id主键获取指定详细数据)
			
获取权限详细数据:(参考) 1.controller:1.注入Servcie调用方法findConsumerById(参数是id); ...