Я столкнулся с проблемой с Entity Framework. Мой код пытается удалить из таблицы 1 или более объектов, в большинстве случаев меньше 10.
foreach (var val in vals)
{
int id = Convert.ToInt32(val);
var item = _container.Users.First(x => x.Id == id);
_container.Subscribers.DeleteObject(item);
}
_container.SaveChanges();
Текущая таблица «Пользователи» насчитывает около 20 000 строк. Когда я запускаю код, если он пытается удалить только одну сущность, это занимает около 10 секунд. Я отладил код и посмотрел в SQL Profiler. Все идет гладко, пока мы не нажмем метод DeleteObject (). Он отправляет этот SQL-запрос в базу данных:
exec sp_executesql N'SELECT
-- Yada
FROM [dbo].[Users] AS [Extent1]
WHERE [Extent1].[UserListId] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=1
Почему структура сущностей загружает все объекты в списке? Straaange!
EDIT:
Когда я изменил код на:
int id = Convert.ToInt32(val);
Users u = new Users();
u.Id = Convert.ToInt32(val);
_container.Users.Attach(s);
_container.Users.DeleteObject(s);
Это работает как шарм! Еще. Код перед "_container.Users.First (x => x.Id == id)" отправился в базу данных, чтобы найти этот объект, но после этого загрузил всю таблицу.