通过方法操作
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;
①.适用于自己创建对象(根据主键来确定对象),然后修改的情况
②.适用于即时查询出来的对象,然后修改的情况.