实体框架工作Remove,RemoveRange和EntityState已删除

时间:2018-08-28 20:12:43

标签: c# entity-framework entity-framework-6

这三行之间有什么区别

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);

                        });
        }

什么时候以及在哪种情况下使用?我一直坚持确定应该使用哪一个。我会尝试所有适合我的方法。但老实说,我不明白这里的概念

1 个答案:

答案 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通过实体框架删除和插入大量记录。