Entity Framework 六
实体框架中的存储过程:
我们在创建edmx的时候把存储过程勾选了,所以在我们的上下文上中生成了方法。
存储过程为:就是需要显示多个表的字段。以往需要显示多个表的字段都是新建一个类把需要的字段当做属性写,然后使用LINQ把需要的字段全部映射出来。它这里一样的
edmx里面会出现不是数据库中的表,这种情景是适用于一个里面中需要显示多表字段
使用存储过程:
等同于在数据库中执行存储过程
使用存储过程的CRUD:
①添加学生信息
存储过程
select SCOPE_IDENTITY()
返回上面操作的数据表最后row的IDENTITY 列的值;也就是添加后的ID(主键)
生成的方法
使用方法:
②更新学生信息
生成的方法:
使用方法:
③删除学生
生成方法:
使用方法:
实体框架中的枚举: 三种方法可以使属性变成枚举类型
1,把现有属性转为枚举
①把你的项目框架调到4.5
②打开设计器,在Teacher 表中新加标量属性 TeacherType.数据库也也需要添加
保存,然后你的Teacher类中就会出现新加的属性
③右键 TeacherType,转换到枚举
④检查类型
⑤添加新老师
2,从设计添加实体
然后把TeacherType的类型改为枚举也可以。
3,在代码里面写了枚举类型
直接在模型浏览器中枚举中添加,选择引用外部类型,把枚举的命名空间写进去就可以了k
实体框架5.0中的空间数据类型支持
一般的数据类型都接受,这就不用说了。
timespan 时间戳类型 ——————》 Byte[] 字节组类型
geography 地理位置类型——————》 System.Data.Entity.Spatial.DbGeography
急切加载:
急切加载是查询一种类型的实体的过程,也加载相关的实体作为查询的一部分。使用Include()方法实现加载。先进行一步的过滤,然后再用where进行筛选。
延迟加载:
实体框架的一个重要功能是延迟加载。延迟加载意味着延迟加载相关数据,直到您明确请求为止。例如,Student类包含StudentAddress作为复杂属性。因此,上下文首先加载数据库中的所有学生,然后在我们访问StudentAddress属性时加载特定学生的地址。
延迟加载规则:
- context.Configuration.ProxyCreationEnabled应该是true。
- context.Configuration.LazyLoadingEnabled应该是true。
- 导航属性应该定义为公共的,虚拟的。如果属性没有被定义为虚拟的,上下文将不会执行延迟加载。
显式加载相关实体
查询相关实体
.Collection(s => s.Courses).Query()
执行原生SQL查询
使用DBContext对数据库执行本地原始SQL查询。可以执行以下类型的查询:
- 返回特定类型的实体的实体类型的SQL查询
- SQL查询返回原始数据类型的非实体类型
- 原始SQL命令到数据库
实体类型的SQL查询:
非实体类型的SQL查询:
可以使用Database类上的SqlQuery方法创建返回任何类型(包括原始类型)的实例的SQL查询。
对数据库的原始SQL命令:
ExecuteSqlCommnad方法在将非查询命令发送到数据库(例如Insert,Update或Delete命令)中非常有用。