EF4: NavigationProperty и join: ошибка или особенность? - PullRequest
0 голосов
/ 25 октября 2011

Я хотел бы проконсультироваться о проблеме, с которой я столкнулся. Я начал работать над проектом с очень сложной базой данных: многие таблицы в БД не имеют первичных ключей или имеют несколько PK, поэтому я не могу добавить правильные ассоциации для всех сущностей в моем edmx. Однако для некоторых организаций это возможно, и мне удалось это сделать. Таким образом, у меня есть две сущности с ассоциацией между ними: Vulner и VulnerDescription. И у меня есть «плохая» таблица соединений для Vulner, называемая VulnerObjectTie (с ментальным FK: VulnerObjectTie.Vulner = Vulner.Id), в которую я не могу добавить правильные ассоциации. Итак, я решил добавить следующий запрос LinqtoEntities:

            var vulerIdList = from vulner in _businessModel.DataModel.VulverSet.Include("Descriptions")
                    join objectVulnerTie in _businessModel.DataModel.ObjectVulnerTieSet on vulner.Id equals objectVulnerTie.Vulner
                    where softwareId.Contains(objectVulnerTie.SecurityObject)
                    select vulner;

где description - Свойство навигации для связи с таблицей VulnerDescription. Запрос работает, но не загружает свойство «Описания». Однако если я удалю оператор соединения, описания будут загружены правильно.

Наиболее очевидное решение этой проблемы - разделить один запрос на два следующих запроса:

            var vulerIdList = from vulner in _businessModel.DataModel.VulverSet
                    join objectVulnerTie in _businessModel.DataModel.ObjectVulnerTieSet on vulner.Id equals objectVulnerTie.Vulner
                    where softwareId.Contains(objectVulnerTie.SecurityObject)
                    select vulner.Id;

        var query = from vulner in _businessModel.DataModel.VulverSet.Include("Descriptions")
                    where vulerIdList.Contains(vulner.Id)
                    select vulner;

Но я думаю, что это выглядит ужасно. Кто-нибудь может предложить более простое решение этой проблемы, или это просто особенность EF4 ??

спасибо *))

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Проблема в том, что EF не очень хорошо подходит для «плохих баз данных». EF (и особенно все инструменты автоматизации, такие как мастер моделей) ожидает четкого и правильного проектирования базы данных.

Include не поддерживается в запросах с использованием пользовательских объединений или проекций. Не поддерживается в этом случае означает, что он полностью опущен.

1 голос
/ 25 октября 2011

Это известная «особенность» или ограничение, в зависимости от того, как вы на это смотрите. Вот интересная дискуссия по теме, я уверен, что есть еще ссылки для поиска: http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/d700becd-fb4e-40cd-a334-9b129344edc9/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...