EFCore_增删改查

发布于:2024-05-21 ⋅ 阅读:(110) ⋅ 点赞:(0)

修改表数据后,均需要通过执行 dbContext.SaveChanges() 函数来保存修改 

单个增加: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();

先查询再修改

// 先查询, 再修改
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));

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

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代码

网站公告

今日签到

点亮在社区的每一天
去签到