EFCore_增删改查

说明

1-修改表数据后,均需要通过执行 dbContext.SaveChanges() 函数来保存修改
2-XxxRange()函数实际上是单个操作的循环,并不是真正意义上的批量操作
3-ExecuteXxx()函数执行批量操作时,是实际上的批量操作。此外,区别于XxxRange(),无需将数据加载至内存(无查询操作,仅生成一条SQL)

单个增加:Add(),参数为实体实例
批量增加:AddRange() ,参数为可枚举类型或数组

dbContext.Books.Add(new Book { Title = "Add", AuthorName = "Add" });
Book[] bookArr =
{
    new Book{ Title="AddRange_1",AuthorName = "AddRange_1"},
    new Book{ Title="AddRange_2",AuthorName = "AddRange_2"},
    new Book{ Title="AddRange_3",AuthorName = "AddRange_3"}
};
dbContext.Books.AddRange(bookArr);

单个删除:Remove(),参数为实体实例
批量删除:AddRange(),参数为可枚举类型或数组

EFCore7.0+时,删除(单个或批量)可通过ExecuteDelete()实现

// Remove()
dbContext.Remove(dbContext.Books.Where(e => e.AuthorName == "Add").SingleOrDefault());
// RemoveRange()
dbContext.RemoveRange(dbContext.Books.Where(e => e.AuthorName.Contains("AddRange")).ToList());

// ExecuteDelete() EFCore7.0+
dbContext.Books.Where(e => e.AuthorName.Contains("AddRange")).ExecuteDelete();

方式:先查询(通过对DbSet执行Linq),再修改

// 先查询, 再修改
Book? book = dbContext.Books.Where(e => e.AuthorName == "Add").SingleOrDefault();
if (book != null)
{
    book.Price += 10;
}

EFCore7.0+时,修改(单个或批量)可通过ExecuteUpdate()实现(第一个参数为被修改的表字段,第二个参数为修改值)

// ExecuteUpdate() EFCore7.0 +
dbContext.Books.Where(e => e.AuthorName == "Add").ExecuteUpdate(setter => setter.SetProperty(e => e.Price, e => e.Price + 10));

此外,还可通过Update()/UpdateRange()实现单个或批量更新
Update()/UpdateRange()会将实例标记为已更改状态,通过SaveChanges()函数将实例更新至DB(实例可以是通过查询获得的,也可以是新建的)

Book book = new() { Id = 1, Title="Test", AuthorName = "123", Price=10 };
dbContext.Books.Update(book);

方式:通过对DbSet执行Linq

IQueryable<Book> books = dbContext.Books.Where(e => e.Price > 0);
if (books.Count()!=0)
{
    foreach (var item in books)
    {
        Console.WriteLine(item.Title);
    }
}

string sqlString = books.ToQueryString(); // 获取查询语句的SQL代码

注:可通过IQueryable<T>的扩展函数ToQueryString()来获取查询语句的SQL代码  

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值