Linq基础知识小记四之操作EF
1、EF简介
EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Data Model,这提供了额外的灵活性,但在性能和简单性上面也会有所损失.
EF的优点:在数据库架构和实体类之间的映射提供了更好的灵活性,还通过程序支持除了SqlServer之外的数据库.
Linq To Sql之于EF
Linq To Sql和EF师出同门,EF支持LINQ to SQL几乎同样的查询功能,所以在使用Linq To Sql学到的查询技术同样适用于EF,LINQ to SQL是一个轻量级的ORM框架,旨在为Microsoft SQL Server数据库提供快速的应用程序开发,其优点是易于使用、简单、高性能.
2、EF实体类
EF允许我们使用任何类来表示数据(但是必须实现特定的接口来实现如导航属性等的功能),如下面的EF实体类Customer类,他被映射到了数据库中的Customer表
public partial class Customer
{
[EdmScalarProperty(EntityKeyProperty = true, IsNullable = false)]
public int Id { get; set; }
[EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
public string Name { get; set; }
}
public partial class Customer
{
[Key]
public int Id { get; set; }
[Required,StringLength(30)]
public string Name { get; set; }
}
两中表示方法都可以,但是引用的命名空间并不相同,具体的关于跟多的属性配置细节请参考EF CodeFirst 约束配置
注:上面的单个类并不能单独的使用,因为我们在使用EF时,并不是直接查询数据库,而是查询一个更高层的模型,该模型叫做Entity Data Model(EDM),所以我们需要莫种方法来描述EDM,EDM通常是由一个以.edmx为扩展名的xml文件来描述的,它包含了以下三个部分
- 概念模型,用来描述EDM并且和数据库完全隔离
- 存储模型,用来描述数据库架构
- 映射规范,用来描述概念模型如何映射到存储模型
这个在我的EF基础知识小记一也有介绍.
创建一个edmx最简单的方法就是在Visual Studio中添加一个”ADO.NET Entity Data Model” 项目,然后就是根据提示来安装.这种方法不但生成了.edmx文件,还为我们生成实体类,EF中的实体类对应EDM中的概念模型.MS提供了一个可视化工具来帮助我们生成EDM.通过设计器我们可以任意的设计EDM中表和实体间的关系,当然也可以通过改写.edmx文件来调整我们EDM,通过设计器和修改edmx我们可以完成一下功能:
1、映射一个表到多个实体
2、映射多个表到一个实体
3、通过ORM领域流行的三种标准策略来映射继承的类型
的三种标准策略包括:
表到层次类型:单个表映射到一个完整的类继承层次结构,表中的一个类型辨别列用来指示每一行数据应该映射到何种类型.
表到类型:单个表映射到单个类型,这意味这继承类型会被映射到多个表,当我们查询一个类似的entity时,EF通过连接(Join)来合并所有的基类型.(联结查询)
表到具体类型:单独的表映射到每个具体的类型,这意味着一个基类型将会被映射到多个表,当我们查询entity时,EF通过生成UNION(联结)来合并数据.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Cypress系列(60)- 运行时的截图和录屏
- 请停止使用Excel进行数据分析,升级到Python吧
- git版本控制器的相关操作
- 离线 Android Studio 环境
- Actor:人生如戏全靠演技--“三维度”逻辑编程语言的设计(3) 角色是一种特定的关系名不正言不顺角色才是真正的主人演员的天分再好的演技也需要角色好演员更需要好剧本
- 2.CSS选择器-CSS基础
- es6 随性学习之let,const与var的区别
- 04-操作文件和目录 遇到的坑
- 1.CSS单位-CSS进阶
- Geode集群搭建
- 2.CSS特性-CSS进阶
- 5.图片-HTML基础
- geode的安装部署
- 3.CSS优先级-CSS进阶
- docker的相关操作