Я хотел бы проконсультироваться о проблеме, с которой я столкнулся. Я начал работать над проектом с очень сложной базой данных: многие таблицы в БД не имеют первичных ключей или имеют несколько 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 ??
спасибо *))