9.4、增删改操作
数据增删改是我们与应用系统使用者最直接的心灵沟通方式。
新增操作
新增一条数据,无需返回(推荐)
// 方式一,推荐
_testRepository.Insert(new TestEntity()
{
Name = "Monk",
CreatedTime = DateTime.Now
});
// 方式二
_testRepository.Entity.Add(new TestEntity()
{
Name = "Monk",
CreatedTime = DateTime.Now
});
新增一条数据,并立即返回新增实体(推荐)
// 方式一,推荐
var newEntity = _testRepository.InsertWithSaveChanges(new TestEntity()
{
Name = "Monk",
CreatedTime = DateTime.Now
});
var newId = _testRepository.Id; // 最新Id
// 方式二
var newEntity = _testRepository.Entity.Add(new TestEntity()
{
Name = "Monk",
CreatedTime = DateTime.Now
});
_testRepository.SaveChanges();
var newId = _testRepository.Id;
新增多条数据,无需返回
var addEntities = new List<TestEntity>(){
new TestEntity()
{
Name = "Monk",
CreatedTime = DateTime.Now
},
new TestEntity()
{
Name = "MonkSoul",
CreatedTime = DateTime.Now
},
};
_testRepository.Insert(addEntities);
新增多条,并立即返回新增实体集合
var addEntities = new List<TestEntity>(){
new TestEntity()
{
Name = "Monk",
CreatedTime = DateTime.Now
},
new TestEntity()
{
Name = "MonkSoul",
CreatedTime = DateTime.Now
},
};
_testRepository.InsertWithSaveChanges(addEntities);
异步新增
await _testRepository.InsertAsync(new TestEntity()
{
Name = "Monk",
CreatedTime = DateTime.Now
});
补充说明
新增操作包含两种:
Insert
InsertWithSaveChanges
它们的主要区别在于是否立即调用了 dbContext.SaveChanges()
方法。
更新操作
更新所有列,先查询实体
var entity = _testRepository.Find(1);
entity.Name = "MonkSoul";
entity.Age = 27;
这种方式,无需调用 _testRepository.Update(entity)
和 _testRepository.SaveChanges()
方法。但是会生成更新所有列的 Sql
更新指定列,先查询实体
var entity = _testRepository.Find(1);
entity.Name = "MonkSoul";
entity.Age = 27;
_testRepository.SetModifyProperties(specEntity,
u => u.Name,
u => u.Age);
这种方式,无需调用 _testRepository.Update(entity)
和 _testRepository.SaveChanges()
方法。但是会生成更新指定列的 Sql
,比如这里是 Name
和 Age
两个属性
更新所有列,无需查询
var entity = new Entity { Name ="Monk", Age = 27, Id = 1};
_testRepository.EntityEntryState(entity) = EntityState.Modified;
注意:必须包含主键 Id
更新指定列,无需查询
var entity = new Entity { Name ="Monk", Age = 27, Id = 1};
_testRepository.Context.Attach(entity);
_testRepository.SetModifyProperties(entity,
u => u.Name,
u => u.Age);
注意:必须包含主键 Id
更新所有列,先查询实体,并立即执行
var entity = _testRepository.Find(1);
entity.Name = "MonkSoul";
entity.Age = 27;
_testRepository.UpdateWithSaveChanges(entity);
更新多条实体,先查询出全部实体
var entities = _testRepository.GetAll(u = > u.Id > 100);
foreach(var entity in entities){
entity.Age = entity.Age + 1;
}
这种方式,无需调用 _testRepository.Update(entity)
和 _testRepository.SaveChanges()
方法。
更新多条实体,先查询出全部实体,并立即执行
var entities = _testRepository.GetAll(u = > u.Id > 100);
foreach(var entity in entities){
entity.Age = entity.Age + 1;
}
_testRepository.UpdateWithSaveChanges(entities);
补充说明
更新操作包含两种:
Update
UpdateWithSaveChanges
它们的主要区别在于是否立即调用了 dbContext.SaveChanges()
方法。
删除操作
根据主键Id删除
_testRepository.Delete(1);
根据主键Id删除,并立即执行
_testRepository.DeleteWithSaveChanges();
根据查询的实体删除
var entity = _testRepository.Find(1);
_testRepository.Delete(entity);
根据查询的实体删除,并立即执行
var entity = _testRepository.Find(1);
_testRepository.DeleteWithSaveChanges(entity);
根据多条已查询的实体删除
var entities = _testRepository.GetAll(u = > u.Id > 100);
_testRepository.Delete(entities);
根据多条已查询的实体删除,并立即执行
var entities = _testRepository.GetAll(u = > u.Id > 100);
_testRepository.DeleteWithSaveChanges(entities);
补充说明
删除操作包含两种:
Delete
DeleteWithSaveChanges
它们的主要区别在于是否立即调用了 dbContext.SaveChanges()
方法。
假删除/软删除
根据主键Id假删除
_testRepository.FakeDelete(1, u => u.Void, 0);
根据主键Id假删除,并立即执行
_testRepository.FakeDeleteWithSaveChanges(1, u => u.Void, 0);
根据条件假删除
_testRepository.FakeDelete(u => u.Id == 1, u => u.Void, 0);
根据条件假删除,并立即执行
_testRepository.FakeDeleteWithSaveChanges(u => u.Id == 1, u => u.Void, 0);
补充说明
假删除操作包含两种:
FakeDelete
FakeDeleteWithSaveChanges
它们的主要区别在于是否立即调用了 dbContext.SaveChanges()
方法。
新增或更新
新增或更新
_testRepository.InsertOrUpdate(entity);
新增或更新,并立即执行
_testRepository.InsertOrUpdateWithSaveChanges(entity);
补充说明
新增或更新操作包含两种:
InsertOrUpdate
InsertOrUpdateWithSaveChanges
它们的主要区别在于是否立即调用了 dbContext.SaveChanges()
方法。
最后更新于
这有帮助吗?