code first :约定大于配置(通过配置实体重写约定)

通过两种方式配置实体:DataAnnotations      Fluent Api

System.ComponentModel.DataAnnotations命名空间中只定义了部分实体验证的特性,在EntityFramework程序集中定义了更多的数据映射特性

DataAnnotations是基于实体配置的一些简单的特性,所在命名空间:System.ComponentModel.DataAnnotations

  1. KeyAttribute:对数据库中表的主键的设置
  2. RequiredAttribute:对应数据库中字段的数据是否可以为null
  3. MaxLengthAttribute:对应数据库中字符串类型字段的最大长度
  4. MinLengthAttribute:在数据库中无对应,但在代码中字符串最小长度
  5. ConcurrencyCheckAttribute:指定用于开放式并发检查的列的数据类型,用于任何数量任何类型的属性中
  6. TimestampAttribute:将列的数据类型指定为行版本,只能用于单字节类型的属性中
  7. DatabaseGeneratedAttribute:标记指定实体属性是由数据库生成的,并指定生成策略(None数据库不生成值,Identity当插入行时,数据库生成值,Computed当插入或更新行时,数据库生成值),此属性是只读的。可用来映射成自动增长列
  8. ColumnAttribute:指定实体属性在数据库中的列名及数据类型
  9. TableAttribute:指定实体类对应的数据表名
  10. ForeignKeyAttribute:指定导航属性的外键字段
  11. NotMappedAttribute:标记指定实体属性在创建数据库中不创建对应字段
  12. ComplexTypeAttribute:标记指定实体属性是将一个对象作为另一个对象的属性,映射到数据库中则子对象表现多个属性字段
  13. StringLengthAttribute:在数据字段中指定最大和最小的字符长度
  14. IndexAttribute:创建索引
  15. InversePropertyAttribute:用在类之间有多重关系的时候

对于实体关系对应的数据表关系,无非“0:1,1:1,0:N,1:N,N:N”这几种,可以使用导航属性中的数据类型来表示,0…1端使用单个实体类型表 示,N端使ICollection<T>集合类型表示.对于单实体端,默认是可为空的,即为0关系,如果要设置为1关系,要使用 [Required]标签来进行标记。但对于一对一中的关系主体与依赖对象确无法做更细节的控制.DataAnnotations可以同时在同一个类后者属性上使用多个标记属性.

例子

     [Table("Student")]//生成数据库对应的Student表
public class StudentInfo
{
[Key]//即使属性不是以Id或者类名+id命名的 也会把SKey创建为主键 ,单个主键为自动增长
public int SKey { get; set; }
public string Name { get; set; }
public char Gender { get; set; }
public DateTime Birth { get; set; } //public ClassInfo ClassInfo { get; set; } //public Teacher Teacher { get; set; }
}

复合主键:指定主键列的顺序[Column(Order=1)],复合主键不自增

     [Table("Student")]//生成数据库对应的Student表
public class StudentInfo
{
[Key]
[Column(Order =)]
public int SKey { get; set; }
[Key]
[Column(Order =)]
public int SKey1 { get; set; }
public string Name { get; set; }
public char Gender { get; set; }
public DateTime Birth { get; set; } //public ClassInfo ClassInfo { get; set; } //public Teacher Teacher { get; set; }
}

同样还使用到Table和Column特性的用法。

  [Table("Student",Schema ="ray")]//生成数据库对应的Student表
public class StudentInfo
{
[Key]
[Column(Order =)]
public int SKey { get; set; }
//[Key]
//[Column(Order =2)]
//public int SKey1 { get; set; }
//[Required]
//[MaxLength(40),MinLength(4)]
public string Name { get; set; }
[Column("性别",TypeName ="Nvarchar()")]
public char Gender { get; set; }
[Required(AllowEmptyStrings =true),StringLength()]
public string Mark { get; set; }
[NotMapped]
public int Age { get; set; }
public DateTime Birth { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
//只读和只写属性不会创建数据库列
public int Nokey1 { get { return ; } }
public int Nokey2 { set { value = ; } }
public int CID { get; set; }
[ForeignKey("CID")]
public ClassInfo ClassInfo { get; set; } //public Teacher Teacher { get; set; }
}
  public class ClassInfo
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
//每班都有很多学生
public ICollection<StudentInfo> Students { get; set; }
//public ICollection<Teacher> Teachers { get; set; }
}

最新文章

  1. 腾讯开放平台 手机QQ登录 错误码:110406 解决办法
  2. Haxe是何物?
  3. Vertica数据查询优化
  4. 百度地图api(摘自百度)
  5. [Android Pro] root用户删除文件提示:Operation not permitted
  6. BZOJ4624 : 农场种植
  7. iOS-项目打包为ipa文件
  8. ActivityGroup里面装的子Activity不执行OnActivityResult()的解决办法
  9. [转]在SqlServer 中解析JSON数据
  10. Poj(1466),最大独立集,匈牙利算法
  11. Java---软件试用次数(Properties类的简单使用)
  12. 转自http://blog.slogra.com/post-13.html,关闭centos虚拟机的蜂鸣声
  13. 浅谈新一代Android操作系统Android L
  14. Sqlmap注入Base64编码的注入点
  15. Git_GitHub-使用过程遇到的问题——坑(持续添加)
  16. onclick事件传递对象参数
  17. Github版本管理以及git使用
  18. 17、php
  19. Sample Classification Code of CIFAR-10 in Torch
  20. MVC初级教程(一)

热门文章

  1. s11 day104 数据库表结构与立即支付流程
  2. Day 11 函数名,闭包,装饰器. +作业
  3. FFmpeg编写的代码
  4. leetcode 105 106 从前序与中序遍历序列构造二叉树 从中序与后序遍历序列构造二叉树
  5. 650. 2 Keys Keyboard
  6. Graph-684. Redundant Connection
  7. 在centOS 7 中安装 MySQL
  8. Jmeter服务器监控 serveragent如何使用
  9. 浅谈Express的put与del
  10. WebAPI Post接收数据