Я пишу приложение, используя WPF, Entity Framework и SQLServer, все это очень удобно.Я смотрел, какие звонки поступают в базу данных с помощью sql profiler, и нашел немало ненужных звонков.Первый был решен довольно легко, но я включил его для всех, кто читает эту ветку в будущем.Предполагая, что у меня есть структура таблицы с 3-мя таблицами, подобными этой Invoice-> InvoiceDetail-> Product
1) Когда я загружаю объект Invoice, он затем выполняет отдельный оператор для извлечения каждого элемента InvoiceDetail.Это легко решается с помощью оператора Include, например,
context.Invoices.Include("InvoiceDetails").Where(i => i.Something == somethingelse);
2) Когда я удаляю счет-фактуру, база данных имеет каскадное удаление, которое автоматически удаляет все InvoiceDetails.Однако EF по-прежнему настаивает на вызове удаления для каждого из объектов InvoiceDetail, которые он имеет в памяти.Если в счете 100 позиций, то он выполнит 101 инструкцию вместо 1. Это плохо.
3) В дополнение к дополнительным инструкциям, выполненным в пункте 2, предполагается, что каждый объект InvoiceDetail указывает на продукт иЯ вызвал загрузку продуктов в память (это произошло бы, если бы я показал счет до того, как его удалил), а затем EF выполняет бесполезный оператор обновления для каждого продукта !!!!Фактически, это заявление об обновлении более чем бесполезно, потому что, если кто-то еще что-то изменил в продукте, то этот код вернет данные обратно !!Если я регистрирую изменения, мы получаем бесполезные записи в журнале.Я подозреваю, что это происходит потому, что в Product была бы коллекция InvoiceDetails, в которой были удалены некоторые элементы, но сам продукт не изменился, так почему обновление?
Спасибо за чтение Cheers, Майкл