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; }
}

小白学习之Code First(四)的更多相关文章

  1. Python小白学习之路(四)——第一次练习题

    写在前面: 今天下雪了呢!连着两天都没有更新学习记录. 我没有偷懒呢.做了一天的练习题,昨天学的内容还没总结完,太累了就回去睡觉了 连续一周早起,强大的内心也无法支撑我疲惫的身体 今天早起做了整理.加 ...

  2. 小白学习之Code First(三)

    上下文Context类中的base构造器的几个方法重置(1.无参 2.database name 3 . 连接字符串) 无参:如果基类base方法中无参,code first将会以 :{Namespa ...

  3. 小白学习之Code First(二)

    Code First约定: 注:EDMX模板 (SSDL:存储模型=>数据库表 ,CSDL:概念模型=>实体,C-S模型=>存储和概念模型之间的映射关系) System.Data.E ...

  4. 小白学习之Code First(一)

    1.根据自己的理解,Code First :通过实体类和相关配置生成对应的数据库,实现实体和数据库的映射关系,或通过实体类和相关配置与已经生成的实体与已经存在的数据库搭建映射关系 例: 实体类:Stu ...

  5. 小白学习安全测试(四)——扫描工具-Vega

    WEB扫描工具-Vega 纯图形化界面,Java编写的开源web扫描器.两种工作模式:扫描模式和代理模式[主流扫描功能].用于爬站.处理表单,注入测试等.支持SSL:http://vega/ca.cr ...

  6. 小白学习之Code First(五)

    Fluent API:另一种配置实体类的方式,它比DataAnnorations提供了更多的配置 其中EntityTypeConfiguration这个类提供了重要的属性.方法来配置对应的实体类,可以 ...

  7. 【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射

    [Unity Shaders]学习笔记——SurfaceShader(四)用纹理改善漫反射 转载请注明出处:http://www.cnblogs.com/-867259206/p/5603368.ht ...

  8. Python小白学习之函数装饰器

    装饰器 2018-10-25 13:49:37 装饰器从字面意思就是用来装饰的,在函数可以理解为:在函数中,我们不想影响原来的函数功能,又想给函数添加新的功能,这时候我们就用到了装饰器. 一般函数操作 ...

  9. USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)

    转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...

随机推荐

  1. MSSQL 全库搜索 指定字符串

    平时在在MSSql中查询数据的时候,想查找,某个字段在数据库中是否存在,并且查询出在哪个表中,哪个字段下面,在不知道的情况下,操作起来会很麻烦,然后就写了一个sql语句,使用起来感觉挺方便的.当然了, ...

  2. 浅析JS模块规范:AMD,CMD,CommonJS

    from:https://www.jianshu.com/p/09ffac7a3b2c 随着JS模块化编程的发展,处理模块之间的依赖关系成为了维护的关键.   模块化 AMD,CMD,CommonJS ...

  3. oracle12c不能进入到http://localhost:1158/em的解决办法

    oracle12c的em经过精简,比11g小 很多,登陆方式也发生了变化,原来的https://localhost:1158/em或者https://localhost:1158/em登陆总是会遇到问 ...

  4. ASP.Net Core 2.2 InProcess托管的Bug:unable to open database file

    最近把项目更新到了ASP.Net Core 2.2,发布之后发现在IIS下使用SQLite数据库不行了,报异常说不能打开数据库."unable to open database file&q ...

  5. .NET Core 运行时标识符 (RID) 目录

    RID 是什么? RID 是运行时标识符的缩写. RID 用于标识其中将运行应用程序或资产(即程序集)的目标操作系统. 其外观类似如下:“ubuntu.14.04-x64”.“win7-x64”.“o ...

  6. NetCore入门篇:(十二)在IIS中部署Net Core程序

    一.简介 微软已经为net在iis中的部署提供了良好的支持,在IIS中部署NetCore是一件很容易的事. 二.在IIS中部署Net Core程序 1.微软官方文档有详细说明.进入 2.如果你已经熟悉 ...

  7. SL 的 DATAGRID中如何加入计算列?

    例如,我的数据库中实体表对应到EF中的实体类是 class { public int  F1; public int F2; } 我在服务端做domainservice 我在SL端使用wcf ria, ...

  8. Redis持久化————AOF与RDB模式

      1.        官方说明:  By default Redis asynchronously dumps the dataset on disk. This mode is good enou ...

  9. Linux基本命令学习与使用

    1.chgrp,chown,chmod(-R递归修改文件夹下的文件) chgrp:修改文件属于哪个组 chown:修改文件属于哪个用户 chmod:修改文件权限r=4,w=2,x=1 chmod 4+ ...

  10. MySQL索引(六)

    一.什么是索引 索引就像一本书的目录一样,如果在字段上建立索引,那么以索引为列的查询条件时可以加快查询的速度,这个就是MySQL优化的重要部分 二.创建主键索引 整个表的每一条记录的主键值在表内都是唯 ...