Использование классов Linq2sql в качестве источника данных
Если в качестве источника данных зарегистрировать сущность LINQ2SQL, имеющую ссылки (ассоциации) на собственный тип (обычная древовидная структура справочника), то при регистрации система виснет, и начинает "съедать" память. Передача ноля в параметре maxNestingLevel приводит к тормозам при регистрации и отсутствию распознанных свойств у источника данных в итоге.
Или снова я что-то делаю не так...
UPD: к такому эффекту приводит использование реального источника. Использование фиктивного (списка нужного типа с одним элементом) и указание правильного значения maxNestingLevel позволяет открыть дизайнер. В связи с чем вопросы:
1. Судя по всему в режиме дизайна происходит перечисление данных. Зачем? Как правило, для дизайна нужна только структура.
2. На что и как влияет параметр maxNestingLevel? Из документации не очень понятно.
Или снова я что-то делаю не так...
UPD: к такому эффекту приводит использование реального источника. Использование фиктивного (списка нужного типа с одним элементом) и указание правильного значения maxNestingLevel позволяет открыть дизайнер. В связи с чем вопросы:
1. Судя по всему в режиме дизайна происходит перечисление данных. Зачем? Как правило, для дизайна нужна только структура.
2. На что и как влияет параметр maxNestingLevel? Из документации не очень понятно.
Комментарии
1) перечисление данных происходит, если не удалось получить полную схему (напр., св-во имеет значение null, и раскрыть его не получается). В этом случае берется следующая запись из IEnumerable, и так далее, пока схема не будет заполнена.
2) этот параметр влияет на глубину вложенности подклассов. Если в структуре есть кольцевые ссылки, то их количество (вложенность) также ограничивается этим параметром.
1. А все таки - зачем? Ведь для построения полной схемы достаточно узнать тип элементов IEnumerable. А в случае свойства типа Object все равно нельзя гарантировать, что при построении отчета там будет объект того же типа, что и при дизайне. Generic вариант метода RegisterData вообще избавил бы от необходимости получать элементы коллекции.
2. Что есть "глубина вложенности подклассов"? Пока что получается, что в передача неправильного значения приводит к зависанию. Пара примеров с различной глубиной вложенности всё прояснили бы
Спасибо за оперативность.
2. Пришлите свой пример, который зависает - буду разбираться.
К сожалению, прислать данные, на которых это воспроизводится у меня вряд ли получится. По сути, это LINQ2SQL сущность, имеющая шесть различных ссылок на собственный тип, и около 70000 объектов этого класса, и возможна ситуация, когда у всех объектов некоторые ссылки будут равны null. Указание ноля в параметре maxNestingLevel приводит к тормозам при регистрации источника данных и отсутствию распознанных свойств у источника данных в итоге, указание любого другого значения приводит к еще большим тормозам (я не дождался результата). На малых объемах данных эффект не воспроизводится.
Давайте так - на что будут влиять различные значения maxNestingLevel если использовать в качестве источника данных Northwind.Employees через LINQ2SQL? Например, указав 5 и больше можно всё повесить.
При его регистрации с указанием maxNestingLevel = 5 получаем вот это: