EF4:NavigationProperty和join:是一个错误还是一个特征?

问题描述:

我想咨询一下我遇到的问题。我已经开始研究一个非常困难的数据库项目:数据库中的很多表没有主键或有多个PK,所以我无法为我的EDMX中的所有实体添加正确的关联。但是,对于一些实体来说,这是可能的,我也设法做到这一点。因此,我有两个实体之间存在关联:Vulner和VulnerDescription。而且我有一个名为VulnerObjectTie(带有心理FK:VulnerObjectTie.Vulner = Vulner.Id)的Vulners“坏”连接表,我无法添加正确的关联。所以,我决定做添加以下LinqtoEntities查询:EF4:NavigationProperty和join:是一个错误还是一个特征?

  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; 

这里介绍的导航物业与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的一个特殊功能?

thankyouplease :))

它取决于你如何看待它一个已知的“功能”或限制。这里有一个有趣的话题讨论,我敢肯定有更多的参考文献可以找到:http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/d700becd-fb4e-40cd-a334-9b129344edc9/

这里的问题是,EF不太适合“坏数据库”。 EF(尤其是像模型向导这样的所有自动化工具)都需要清晰和正确的数据库设计。

Include在使用自定义连接或投影的查询中不受支持。在这种情况下不支持意味着它被完全省略。