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 ...
随机推荐
- python lmdb demo 这接口和BDB一样恶心啊!
import lmdb lmdb_img_name = "test.lmdb" env = lmdb.open(lmdb_img_name, map_size=1e6) with ...
- Codeforces--630I--Parking Lot(规律)
I - Parking Lot Crawling in process... Crawling failed Time Limit:500MS Memory Limit:65536KB ...
- VScode常用插件(持续更新)
- TPshop规格组合错误
TPshop规格组合错误 修改: admin/logic/goodslogic.class.php 中 方法:getSpecInput() 中 asort($spec_arr_sort) 去掉
- 【Usaco2006Mar】Milk Team Select产奶比赛
[思路分析] 比赛的时候想到了用我确实也想到了树形DP,但是状态没有确定对,连样例都没有过 PS:这是第二道发现还可以用状态作为答案最后输出的题目 正解:树形DP(背包) 按照读进来的数据,我们先建一 ...
- Blender插件初始化范例
目标 [x] 总结Blender插件初始化范例 总结 插件模板 Blender内部插件实现方式模板功能总结如下: 定义了子模块重加载方式 定义了批量加载子模块的方式 插件注册函数 插件注销函数 模块总 ...
- BZOJ 4563 错排+高精度
思路: 把障碍移到对角线 就发现 这是个错位排列问题 用错排公式即可解 s[i]=(s[i-1]+s[i-2])*i //By SiriusRen #include <cstdio> #i ...
- W3C标准冒泡、捕获机制
(一) 捕获和冒泡如何相互影响 我们来做几个任务吧! 有一个前提,#parent为标签,#child为子标签,他们是嵌套关系支线任务1 //捕获模式 document.getElementById(' ...
- 阶乘问题-----sum随变量改变而改变
- 对学Oracle数据库初学者的开场篇
前言:因为项目原因,近期开始学习Oracle数据库.Oracle是目前最流行的数据库之一,功能强大,性能卓越,相对的学习的难度还是不小.我打算将自己的学习过程记录下来,做个积累,方便自己和其他的学习者 ...