Работа с рамкой сущности Remove, RemoveRange и EntityState удалена - PullRequest
0 голосов
/ 28 августа 2018

В чем разница между этими тремя строками

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 голосов
/ 28 августа 2018

Метод Remove Range () используется для удаления коллекции или списка в рамках сущности. Это лучшая альтернатива использованию цикла для перебора коллекции и установки состояния объекта «Удалено».

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» как удаленных и выполняет команду DELETE для всех объектов в context.SaveChanges ().

RemoveRange - это альтернативный метод, который вы можете использовать вместо второго и третьего параметра, опубликованного выше. Рекомендуется использовать RemoveRange и AddRange для удаления и вставки большого количества записей с использованием структуры сущностей.

...