Я создаю веб-приложение ASP.NET 4, используя EF4, и у меня есть такие таблицы:
Продукт
Атрибут
Product_Attribute_Map
Product_Attribute_Map - это кросс-таблица, многие ко многим. Таким образом, продукт может иметь ноль или несколько атрибутов и наоборот.
В коде я делаю это:
//Attribute a = new Attribute(); // Edit:
Attribute a = (from a in context.Attributes where a.AttributeID = 1 select a).First();
a.Name = "test";
Product.Attributes.Add(a);
Я заметил проблему, которая делает это очень медленно. EF4 выполнит этот SQL на сервере:
SELECT
[Extent2].* FROM [dbo].[Product_Attribute_Map] AS [Extent1]
INNER JOIN [dbo].[Product] AS [Extent2] ON [Extent1].[ProductID] = [Extent2].[ProductID]
WHERE [Extent1].[AttributeID] = @p1
Я не понимаю, почему это так. Атрибут может быть назначен 10.000 продуктам, что делает этот запрос неверным. Добавление атрибута в продукт занимает более 5 секунд ...
Как я могу запретить EF4 выбирать все атрибуты? И просто выберите атрибуты для этого продукта.
Спасибо
Редактировать: Это только с использованием шаблона POCO t4. Шаблон EntityObject не имеет этой проблемы.