一步一步学EF系列二【Fluent API的方式来处理实体与数据表之间的映射关系】
2015-09-10 10:37
309 查看
EF里面的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面,还有一个就是Fluent API,通过新增相应的配置类来覆盖默认配置另外。我们主要学习Fluent API,Data Annotations可以自行去学习一下。
补充一下为什么要用Fluent API
使用DataAnnotation非常简单,但对于EntityFramework中的特性,就要在实体类中引入EntityFramework程序集,但实体类最好能是保持与架构无关性的POCO类,才能更具通用性。所以,最好是在数据层中使用FluentAPI在数据层中进行实体类与数据库之间的映射工作。
那怎么直接就动手吧!
一、修改DbContext
代码和之前的是一样的,只是多了个重新方法
二、简单的例子
我们需要在OnModelCreating添加配置。
下面的这些最后每个都亲自试一下 ,具体的也没有太多的难度
ToTable - TableAttribute:配置此实体类型映射到的表名
HasColumnName - ColumnAttribute:配置用于存储属性的数据库列的名称
HasForeignKey - ForeignKeyAttribute:将关系配置为使用在对象模型中的外键属性。如果未在对象模型中公开外键属性,则使用Map方法
Ignore - NotMappedAttribute:从模型中排队某个属性,使该属性不会映射到数据库
HasRequired:通过此实体类型配置必需关系。除非指定此关系,否则实体类型的实例将无法保存到数据库。数据库中的外键不可为null。
HasOptional:从此实体类型配置可选关系。实体类型的实例将能保存到数据库,而无需指定此关系。数据库中的外键可为null。
HasMany:从此实体类型配置一对多关系。
WithOptional:将关系配置为required:optional。(required:0…1端的1,表示必需,不可为null;optional:0…1端的0,表示可选,可为null。下同)
WithOptionalDependent:将关系配置为optional:optional。要配置的实体类型将成为依赖对象,且包含主体的外键。作为关系目标的实体类型将成为关系中的主体。
WithOptionalPrincipal:将关系配置为optional:optional。要配置的实体类型将成为关系中的主体。作为关系目标的实体类型将成为依赖对象,且包含主体的外键。
WithRequired:将关系的指定端配置为必需的,且在关系的另一端有导航属性。
WithRequiredDependent:将关系配置为required:required。要配置的实体类型将成为依赖对象,且包含主体的外键。作为关系目标的实体类型将成为关系中的主体。
WithRequiredPrincipal:将关系配置为required:required。要配置的实体类型将成为关系中的实体。作为关系目标的实体类型将成为依赖对象,且包含主体的外键。
WillCascadeOnDelete:配置是否对关系启用级联删除。
Map:将关系配置为使用未在对象模型中公开的外键属性。可通过指定配置操作来自定义列和表。如果指定了空的配置操作,则约定将生成列名。如果在对象模型中公开了外键属性,则使用 HasForeignKey 方法。并非所有关系都支持在对象模型中公开外键属性。
MapKey:配置外键的列名。
ToTable:配置外键列所在表的名称和架构。
三、运行代码
如果你整个试验了,应该会在配置某个关系的时候出现一个问题,请看下一篇。
我的文章没有太多个理论和官方语言,前面的几篇都是很通俗,已最容易理解的方式进行。当然也只适用初学者。
补充一下为什么要用Fluent API
使用DataAnnotation非常简单,但对于EntityFramework中的特性,就要在实体类中引入EntityFramework程序集,但实体类最好能是保持与架构无关性的POCO类,才能更具通用性。所以,最好是在数据层中使用FluentAPI在数据层中进行实体类与数据库之间的映射工作。
那怎么直接就动手吧!
一、修改DbContext
代码和之前的是一样的,只是多了个重新方法
二、简单的例子
我们需要在OnModelCreating添加配置。
下面的这些最后每个都亲自试一下 ,具体的也没有太多的难度
ToTable - TableAttribute:配置此实体类型映射到的表名
HasColumnName - ColumnAttribute:配置用于存储属性的数据库列的名称
HasForeignKey - ForeignKeyAttribute:将关系配置为使用在对象模型中的外键属性。如果未在对象模型中公开外键属性,则使用Map方法
Ignore - NotMappedAttribute:从模型中排队某个属性,使该属性不会映射到数据库
HasRequired:通过此实体类型配置必需关系。除非指定此关系,否则实体类型的实例将无法保存到数据库。数据库中的外键不可为null。
HasOptional:从此实体类型配置可选关系。实体类型的实例将能保存到数据库,而无需指定此关系。数据库中的外键可为null。
HasMany:从此实体类型配置一对多关系。
WithOptional:将关系配置为required:optional。(required:0…1端的1,表示必需,不可为null;optional:0…1端的0,表示可选,可为null。下同)
WithOptionalDependent:将关系配置为optional:optional。要配置的实体类型将成为依赖对象,且包含主体的外键。作为关系目标的实体类型将成为关系中的主体。
WithOptionalPrincipal:将关系配置为optional:optional。要配置的实体类型将成为关系中的主体。作为关系目标的实体类型将成为依赖对象,且包含主体的外键。
WithRequired:将关系的指定端配置为必需的,且在关系的另一端有导航属性。
WithRequiredDependent:将关系配置为required:required。要配置的实体类型将成为依赖对象,且包含主体的外键。作为关系目标的实体类型将成为关系中的主体。
WithRequiredPrincipal:将关系配置为required:required。要配置的实体类型将成为关系中的实体。作为关系目标的实体类型将成为依赖对象,且包含主体的外键。
WillCascadeOnDelete:配置是否对关系启用级联删除。
Map:将关系配置为使用未在对象模型中公开的外键属性。可通过指定配置操作来自定义列和表。如果指定了空的配置操作,则约定将生成列名。如果在对象模型中公开了外键属性,则使用 HasForeignKey 方法。并非所有关系都支持在对象模型中公开外键属性。
MapKey:配置外键的列名。
ToTable:配置外键列所在表的名称和架构。
三、运行代码
如果你整个试验了,应该会在配置某个关系的时候出现一个问题,请看下一篇。
我的文章没有太多个理论和官方语言,前面的几篇都是很通俗,已最容易理解的方式进行。当然也只适用初学者。
相关文章推荐
- Android 更新UI的两种方法——handler和runOnUiThread()
- Mysql生成UUID
- IOS项目之UICollectionView中Item布局偏移问题
- RequireJS和AMD规范
- java gui 下拉框中项删除按钮
- UISearchBar 的相关属性和delegate
- requireJS的使用
- easyui form load onLoadSuccess 的用法
- 获取客户端的IP地址request.getRemoteAddr() 用法
- 《开源框架那些事儿22》:UI框架设计实战
- 《开源框架那点事儿20》:发布TinyUI前端框架
- 如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI
- TinyUI组件开发示例
- UI开发的终极解决方案
- org.tinygroup.databasebuinstaller-数据库结构及元数据自动创建
- 更改UIStatusBar(电池栏)的颜色的几种方式
- 改变UITextField placeHolder颜色、字体 、输入光标位置等
- Java 常用类String、StringBuffer和StringBuilder
- UIActivityIndicatorView、UIProgressView 活动与进度指示器 (实例)
- Looper,handler类实现其他线程接收UI线程发送的消息