c#基础知识 EF
2020-09-04 10:21:00 0 举报
AI智能生成
c#基础知识 EF
作者其他创作
大纲/内容
反射
加载dll,读取相关信息
加载程序集
Load
LoadFile
LoadFrom
获取程序集中所有的类
通过方法GetTypes来实现
通过方法GetType("类名全写")来实现获取单个类(DBHelper)
获取类中的所有构造函数
获取类中的所有属性
获取类中的所有方法
获取类中的所有接口
反射创建对象
通过Activator.CreateInstance()方法来创建对象
IOC(反射+简单工厂+配置文件)
Lambda
Linq
特性
常用特性
自定义特性
可作用的范围
约定规则
特性的使用方式(eg: ypfAttribute特性 mrAttribute特性)
序列化和反序列化
方案一:利用JavaScriptSerializer对象实现,需要添加System.Web.Extensions程序集的引用
方案二:利用程序集Newtonsoft.Json.dll来实现
加密和解密
MD5不可逆加密:加密后可以是16位,也可以是32位,任何语言的MD5加密后的结果都相同
DES可逆对称加密
RSA可逆非对称加密
EF
增删改操作
通过方法操作
a. 增加1个实体. Add() 不需要Attach()附加
b. 增加1个集合. AddRange() 不需要Attach()附加
c. 删除. Remove()
①:自己创建了一个实体(非查询出来的),必须先Attach,然后Remove
②:访问数据库,即时查询出来的数据(已经放到EF本地缓存里了),可以省略Attach,直接Remove(当然附加了也不受影响)
d. 修改(如果数据主键不存在,执行增加操作). AddOrUpdate(),可以省略Attach,直接AddOrUpdate.
①: 如果是执行增加操作,不需要进行Attach附加,但附加了Attach不受影响
②:如果是执行修改操作,不能进行Attach的附加,附加了Attach将导致修改失效,saveChange为0
e. 修改. 不需要调用任何方法.
①:自己创建对象→先Attach(根据主键来区分对象)→然后修改属性值→最后saveChange
②: EF即时查询对象(自动本地缓存)→然后修改属性值→最后saveChange
通过状态控制
a. 增加. db.Entry(sl).State = EntityState.Added;
b. 删除. db.Entry(sl).State = EntityState.Deleted;
①.适用于自己创建对象(根据主键来确定对象),然后删除的情况.
②.适用于即时查询出来的对象,然后进行删除的情况
c. 修改. db.Entry(sl).State = EntityState.Modified;
①.适用于自己创建对象(根据主键来确定对象),然后修改的情况
②.适用于即时查询出来的对象,然后修改的情况.
高级属性
延迟加载(Lazy Loading)
导航属性需要标记为Virtual
poco类是public且不能为sealed
立即加载(Eager Loading)
①:先关闭延迟加载:db.Configuration.LazyLoadingEnabled = false;
②:查询主表的同时通过Include把从表数据也查询出来:
显示加载(Explicit Loading)
前提
①:关闭了延迟加载:db.Configuration.LazyLoadingEnabled = false;
②:单纯查询了主表,没有使用Include函数关联查询从表.
步骤
①:单个实体用:Reference
②:集合用:Collection
③:最后需要Load一下
事务
SaveChanges
DbContextTransaction
TransactionScope
核心代码
适用场景
①该种事务适用于多数据库连接的情况
②主键id自增的情况,同一个业务线中,需要拿到新增加的数据的主键id,进行操作
③多线程带锁的情况,同一条业务线前半部分必须先SaveChanges,才能保证数据准确性
实体状态
状态方法
Added
Deleted
Modified
Detached
unChanged
检查状态
DbEntityEntry 追踪单个实体的状态
ChangeTracker 追踪EF上下文中所有实体的状态
Local 获取单个实体状态发生增加、修改的实体集合(不含删除)
删除状态和附加状态: AsNoTracking 和 Attach
DataAnnotations修改默认协定
DataAnnotations
Key 声明主键
Required 非空声明
MinLength MaxLength 设置string类型的最大长度和最小长度,数据库的对应nvarchar
StringLength 设置string类型的长度,数据库对应nvarchar
Timestamp 将byte[]类型设置为timestamp类型
ConcurrencyCheck 并发检查,执行update操作时,会检查并发性(乐观锁)
DataAnnotations.Schema
Table
Column
ForeignKey
NotMapped
初始化策略
CreateDatabaseIfNotExists
DropCreateDatabaseIfModelChanges
DropCreateDatabaseAlways
自定义初始化
禁用数据库策略
数据迁移
步骤
①:新建Configuration.cs类,在其构造函数中进行相关配置。
②:改变数据库的初始化策略为,MigrateDatabaseToLatestVersion ,并在Configuration类中配置开启自动迁移:AutomaticMigrationsEnabled = true;
③:显式开启允许修改表结构:AutomaticMigrationDataLossAllowed = true; (默认是关闭的)
0 条评论
下一页