第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定
一. 简介
1. DataAnnotations说明:EF提供以特性的方式添加到 domain classes上,其中包括两类:
A:System.ComponentModel.DataAnnotations命名空间下的特性是表中列的属性的。
包括:Key、Required、MinLength和MaxLength、StringLength、Timestamp、ConcurrencyCheck。
B:System.ComponentModel.DataAnnotations.Schema命名空间下的特性是控制数据库结构的。
包括:Table、Column、ForeignKey、NotMapped。
2. 特性介绍
① Key :声明主键
② Required:非空声明
③ MinLength和MaxLength:设置string类型的最大长度和最小长度,数据库的对应nvarchar
④ StringLength:设置string类型的长度,数据库对应nvarchar
⑤ Timestamp:将byte[]类型设置为timestamp类型
⑥ ConcurrencyCheck:并发检查,执行update操作时,会检查并发性(乐观锁)
⑦ Table: 给代码中的类换一个名来映射数据库中的表名.(还可以设置表的架构名称 [Table("myAddress", Schema = "Admin")] )
⑧ Column: 给代码中类的属性换一个名来映射数据库中表的列名. (还可以设置列的类型、列在表中的显示顺序 [Column("myAddressName2", Order = 1, TypeName = "varchar")])
⑨ ForeignKey:设置外键,特别注意里面的参数填写什么.
⑩ NotMapped: 类中的列名不在数据库表中映射生成. (还可以只设置get属性或者只设置set属性,在数据库中也不映射)
另外还有:Index、InverseProperty、DatabaseGenerated、ComplexType 这四个都不常用,在这里就不多介绍了
(详细可以看:http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx)
二. 代码实战
public class Student4
{
[Key] //主键声明
public string studentKey { get; set; } [Required] //非空声明
public string stuName { get; set; } [MaxLength()] //最大长度
public string stuTxt1 { get; set; } [MaxLength(), MinLength()] //最大长度和最小长度
public string stuTxt2 { get; set; } [Timestamp] //设置为时间戳
public byte[] rowVersion { get; set; } [ConcurrencyCheck] //并发检查
public string stuTxt3 { get; set; } public virtual StudentAddress4 stuAddress4 { get; set; }
} [Table("myAddress")] //设置类映射的数据库表名
//[Table("myAddress", Schema = "Admin")] //设置类映射的数据库表名和架构名
public class StudentAddress4
{
[ForeignKey("stu")] //设置外键(对应下面声明的 stu) //这里符合 类名+id(忽略大小写)的规则,所以自动生成主键
public string studentAddress4Id { get; set; } [Column("myAddressName")] //设置映射数据库中表的列名
public string stuAddressName { get; set; } [Column("myAddressName2", Order = , TypeName = "varchar")] //设置映射数据库中表的列名、顺序、类型
public string stuAddrssName2 { get; set; } [NotMapped]//不映射数据
public string addressNum { get; set; } //不映射数据
public string txt1 { get { return stuAddrssName2;} } //不映射数据
public string _txt2 = "";
public string txt2 { set { _txt2 = value; } } public virtual Student4 stu { get; set; } }
public class dbContext4 : DbContext
{
public dbContext4()
: base("name=dbContext4")
{ }
public DbSet<Student4> Student4 { get; set; } public DbSet<StudentAddress4> StudentAddress4 { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
<!--正宗的CodeFirst DataAnnotation-->
<add name="dbContext4" connectionString="data source=localhost;initial catalog=CodeFirstDB4;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
三. 总结
DataAnnotations通过注解形式改变数据库结构,非常灵活,当然EF还提供另外一种方式 Fluent API的形式,可以将一个类映射成多个数据库表,还可以将配置写成多个文件,方便控制。
关于Fluent API更多用法,详解下一个章节。
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定的更多相关文章
- 第十六节: EF的CodeFirst模式通过Fluent API修改默认协定
一. 简介 1. 优先级:Fluent API > data annotations > default conventions. 2. 所有的Fluent API配置都要在 OnMode ...
- 第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移
一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略: 1. CreateDatabaseIfNotExists:EF的默认策略,数据库不存在,生成数据库:一旦model发生变 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课
centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 大白话5分钟带你走进人工智能-第十五节L1和L2正则几何解释和Ridge,Lasso,Elastic Net回归
第十五节L1和L2正则几何解释和Ridge,Lasso,Elastic Net回归 上一节中我们讲解了L1和L2正则的概念,知道了L1和L2都会使不重要的维度权重下降得多,重要的维度权重下降得少,引入 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- EF的CodeFirst模式自动迁移(适用于开发环境)
EF的CodeFirst模式自动迁移(适用于开发环境) 1.开启EF数据迁移功能 NuGet包管理器------>程序包管理控制台---------->Enable-Migrations ...
随机推荐
- LeetCode算法题-K-diff Pairs in an Array(Java实现)
这是悦乐书的第254次更新,第267篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第121题(顺位题号是532).给定一个整数数组和一个整数k,您需要找到数组中唯一的k- ...
- Linux Collection:源和更新
PAS 配置sources.list软件源 参考例子(Debian 9,文件/etc/apt/sources.list): deb https://mirrors.ustc.edu.cn/debian ...
- 码农人生——从未学过Android如何开发Android App 案例讲解-第002期案例
标题有点晃眼,本次分享是002期博文的实践故事,不会有任何代码.也不会教别人android 如何开发,类似博文已经有大批大批,而且还会有陆陆续续的人写,我写的文章,主要是经验之谈,希望总结出的一些方法 ...
- pymsql模块
老师的博客地址:http://www.cnblogs.com/wupeiqi/articles/5713330.html 通过pymysql 模块可以通过朋友去操作mysql 数据库,首先的在pip上 ...
- Hadoop Yarn配置项 yarn.nodemanager.resource.local-dirs探讨
1. What is the recommended value for "yarn.nodemanager.resource.local-dirs"? We only have ...
- 重建二叉树[by Python]
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2 ...
- [看图说话]在VMware Workstation 9中安装Mac OS X 10.8 Mountain Lion
本文环境: CPU:Intel Core i7 920: OS:Windows 7: 内存:8G: 玩Hackintosh各有各的理由,不管什么理由,利用虚拟机安装Mac OS X都是一个可行的办法. ...
- ansible 与 Jinja2的结合
1.文件架构 [root@master template]# tree . ├── jinj2_test.yml ├── meta ├── tasks ├── templates │ └── te ...
- BeanShell用法汇总(部分摘抄至网络)
说明:本文部分资料摘抄至 来源: http://www.cnblogs.com/puresoul/p/4915350.html 来源: http://www.cnblogs.com/puresoul/ ...
- asp.net core Serilog的使用
先贴上关于使用这个日志组件的一些使用方法,等有时间了在吧官方的文档翻译一下吧,现在真是没时间. Serilog在使用上主要分为两大块: 第一块是主库,包括Serilog以及Serilog.AspNet ...