LINQ to SQL - Ассоциация теряется, когда я выключаю ObjectTrackingEnabled - PullRequest
0 голосов
/ 15 июля 2010

Я использую Linq-to-SQL (C # 3.5) для чтения двух таблиц, дома и в округе, из моей базы данных (SQL Server 2000).Дом имеет столбец CountyID, который соответствует столбцу ID в таблице округов.Таблица County имеет столбцы ID и CountyName. В базе данных нет связи - я добавил ее в файл dbml.(Родительский класс = округ, дочерний класс = дом)

Теперь я могу запросить таблицу House и получить название округа как house.County.CountyName - именно то, что я хочу.если я не установлю EnableObjectTracking false.Я получаю примерно 3-кратное улучшение производительности, но дочерний объект округа в Доме является нулевым.

Есть ли способ обойти это?

1 Ответ

1 голос
/ 15 июля 2010

Когда вы устанавливаете EnableObjectTracking в false, вы также отключаете отложенную загрузку дочерних объектов, как вы заметили.MSDN говорит ...

Отложенная загрузка требует отслеживания объекта.Допустимы только следующие три режима:

ObjectTrackingEnabled = false.DeferredLoadingEnabled игнорируется и выводится как ложное.Это поведение соответствует DataContext только для чтения.

ObjectTrackingEnabled = true.DeferredLoadingEnabled = false.Эта ситуация соответствует DataContext, который позволяет пользователям загружать граф объектов с помощью директив LoadWith, но не включает отложенную загрузку.

Оба значения имеют значение true.Это значение по умолчанию.

Вы можете использовать метод LoadWith для заполнения дочерних объектов, если вы хотите, чтобы отслеживание объектов было отключено.Пожалуйста, смотрите MSDN для получения дополнительной информации о LoadWith

...