EF4: NavigationProperty和join:是一个bug或一个特性

本文关键字:一个 bug NavigationProperty join EF4 | 更新日期: 2023-09-27 18:12:12

我想咨询一下我遇到的一个问题。我已经开始在一个非常困难的数据库项目上工作:数据库中的许多表没有主键或有多个pk,所以我不能为我的edmx中的所有实体添加正确的关联。然而,对于某些实体来说,这是可能的,我设法做到了。因此,我有两个实体,它们之间有关联:Vulner和vulnerability description。我为漏洞者准备了一个"坏"连接表,名为vulnerability objecttie(带有心理FK: vulnerability objecttie)。漏洞=漏洞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是与vulnerability description表关联的导航属性。查询可以工作,但它不加载description属性。但是,如果我删除连接操作符,那么description将被正确加载。

这个问题最明显的解决方案是将一个查询分成接下来的两个查询:

            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的一个特殊功能?

thankyouplease:))

EF4: NavigationProperty和join:是一个bug或一个特性

这是一个已知的"功能"或限制,取决于你如何看待它。这里有一个关于这个话题的有趣的讨论,我相信还有更多的参考资料可以找到:http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/d700becd-fb4e-40cd-a334-9b129344edc9/

这里的问题是EF不太适合"糟糕的数据库"。EF(尤其是所有自动化工具,如模型向导)期望清晰和正确的数据库设计。

在使用自定义连接或投影的查询中不支持

Include