这三行之间有什么区别
var courses = _context.Courses
.Include("AssignedCustomers")
.Include("PricingSchedule")
.Include("Licenses")
.Include("GroupCourses")
.Include("GroupLicenses")
.Where(e => courseIds.Contains(e.Id)).ToList();
courses.ForEach(currentCourse =>
{
第一
_context.CustomerCourses.RemoveRange(currentCourse.AssignedCustomers);
第二
currentCourse.AssignedCustomers.ToList().ForEach(ac =>
{
_context.Entry(ac).State = EntityState.Deleted;
});
第三
currentCourse.AssignedCustomers.ToList().ForEach(ac =>
{
currentCourse.AssignedCustomers.Remove(ac);
});
}
什么时候以及在哪种情况下使用?我一直坚持确定应该使用哪一个。我会尝试所有适合我的方法。但老实说,我不明白这里的概念
答案 0 :(得分:1)
Remove Range()方法用于在实体框架内删除集合或列表。这是使用循环遍历集合并将对象的实体状态设置为Deleted的更好选择。
IList<Book> booksToRemove = new List<Book>() {
new Book() { BookId = 1, BookName = "Rich Dad Poor Dad" };
new Book() { BookId = 2, BookName = "The Great Gatsby" };
new Book() { BookId = 3, BooktName = "The Kite Runner" };
};
using (var context = new LibraryDBEntities()) {
context.Books.RemoveRange(booksToRemove);
context.SaveChanges(); }
在上面的示例中,RemoveRange(booksToRemove)将列表“ booksToRemove”中所有实体的状态设置为已删除,并对context.SaveChanges()上的所有实体执行DELETE命令。
RemoveRange是一种替代方法,您可以使用它代替上面发布的第二个和第三个选项。建议使用RemoveRange和AddRange通过实体框架删除和插入大量记录。