EF6学习笔记(六续) 复杂数据模型建表测试
测试以下几种模型关系:
1对1或0 、 1对多 、 多对多
1 对 1 或 0
如果直接定义两个模型,相互直接增加导航属性,会提示错误,必须为这个对应关系设定主副关系;
public class Team
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Address Address { get; set; }
} public class Address
{
[ForeignKey("Team")]
public int ID { get; set; }
public string City { get; set; }
public string DetailAddress { get; set; }
public virtual Team Team { get; set; }
}
1 对 多 ( 0或1 对多):
public class Model1
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Model2> Model2s { get; set; }
} public class Model2
{
public int ID { get; set; }
public string Name { get; set; }
}
主表中定义子表的ICollection<T>导航属性行即可实现EF自动创建两个表,并在子表中自动增加 Model1_ID 列;(列名命名格式为:<类名>+下划线+<主键名>)
(并且自动为外键):(外键命名规则:FK_ + <子表全名> + 下划线 + <主表全名> + 下划线 + 列名)
也就是说在子表中并不一定需要主表的导航属性就可以定义主次表1对多的关系;
如果希望手动来定义外键,则必须在子表中明确增加主表的导航属性:
public class Model1
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Model2> Model2s { get; set; }
} public class Model2
{
public int ID { get; set; }
[ForeignKey("Model1")]
public int Model1ID { get; set; } public string Name { get; set; }
public virtual Model1 Model1 { get; set; }
}
此时,外键列名就为自己设定的名称,外键也会根据命名规则,最后部分变为外键列名;
上面2个方式除了命名规则不同以外,还有个不同,第2种方式由于外键对应的列是int 数值型的,那么就不可以为空;即只能是多对1,不可以是多对0;
当然也可以在数值型后面加 ? ,来定义可以为空;(用来实现 0或1 对 多)
注意:在数据库升级迁移过程中,把一个字段从可以为空变为不可以为空,如果这个表中存在数据而且该字段存在为空的行,则数据库升级将不会成功!
多对多
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Course> Courses { get; set; }
} public class Course
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
多对多表是在两个模型相互加 ICollection<T> 导航属性;
EF会自动增加一个新表用来存放对应关系表;
EF6学习笔记(六续) 复杂数据模型建表测试的更多相关文章
- ASP.NET MVC5 及 EF6 学习笔记 - (目录整理)
个人从传统的CS应用开发(WPF)开始转向BS架构应用开发: 先是采用了最容易上手也是最容易搞不清楚状况的WebForm方式入手:到后面就直接抛弃了服务器控件的开发方式,转而采用 普通页面+Ajax+ ...
- EF6学习笔记(六) 创建复杂的数据模型
EF6学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇原文地址:Creating a More Complex Data Model 本篇讲的比较碎,很多内容本人 ...
- 【EF6学习笔记】目录
[EF6学习笔记](一)Code First 方式生成数据库及初始化数据库实际操作 [EF6学习笔记](二)操练 CRUD 增删改查 [EF6学习笔记](三)排序.过滤查询及分页 [EF6学习笔记]( ...
- EF6 学习笔记(五):数据库迁移及部署
EF6学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 原文地址:Code First Migrations and Deployment 原文主要讲两部分:开发环境下 ...
- EF6学习笔记(四) 弹性连接及命令拦截调试
EF6学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本章原文地址:Connection Resiliency and Command Interception 原文 ...
- EF6 学习笔记(一):Code First 方式生成数据库及初始化数据库实际操作
EF6 学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文地址: Creating an Entity Framework Data Model 说明:学习 ...
- Java IO学习笔记六:NIO到多路复用
作者:Grey 原文地址:Java IO学习笔记六:NIO到多路复用 虽然NIO性能上比BIO要好,参考:Java IO学习笔记五:BIO到NIO 但是NIO也有问题,NIO服务端的示例代码中往往会包 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
随机推荐
- day28元类与异常查找
元类与异常处理1. 什么是异常处理 异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常 没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止 异常包含三个部分: ...
- CSV文件乱码展示(编码格式问题)
最开始mac上打开CSV文件乱码,是这样的:CSV文件编码格式为UTF-8 解决办法一:将excel文件同样的转换编码格式为utf-8,具体操作如下: 去掉tab,勾选comma 最后,将文件另存为u ...
- 游戏中转盘概率的算法---python实现
加入转盘的内容及概率如下 转盘倍数 0.5 0.6 0.7 0.8 1 1.2 1.5 1.8 2 机率 0.2 0.15 0.15 0.2 0.2 0.1 0.1 0.05 0.05 下面来实现转盘 ...
- mysql数据库存中文字段
mysql数据默认编码是拉丁,而我们更多的使用utf8, 在创建库的时候执行参数即可: CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET ...
- 清除UIWebView缓存
//清除cookies NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCook ...
- RMI(远程方法调用)入门
这两篇可以入门 http://www.cnblogs.com/ninahan0419/archive/2009/06/25/javarmi.html http://www.cnblogs.com/wx ...
- Rhythmk 一步一步学 JAVA(6): JSP 语法学习笔记
1.修改JSP页面模版: 找到MyEclips安装目录,搜索“Jsp.vtl”,找到该文件修改编码,以及一些不需要用到的代码. 2.查找项目生成的Servlet文件路径: 查看当前项目父级目录搜索 . ...
- JavaScript: DOM Docunment
Meaning: In browser , we exchange data using JavaScript code with user. We should know that most of ...
- xadmin 常见错误
版本: Django==2.0.5 xadmin==0.6.1 djangorestframework==3.9.0 1.No module named 'django.core.urlresolve ...
- python 内置元祖子类
a = (zhangsan,20,nv,123@163.com) 输出姓名 a[0] 输出年龄 a[1] 输出性别 a[2] ..... 这样写可读性非常低 使用 内置元祖子类 from collec ...