2011-10-25 74 views
0

我想諮詢一下我遇到的問題。我已經開始研究一個非常困難的數據庫項目:數據庫中的很多表沒有主鍵或有多個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 :))

回答

1

這裏的問題是,EF不太適合「壞數據庫」。 EF(尤其是像模型嚮導這樣的所有自動化工具)都需要清晰和正確的數據庫設計。

Include在使用自定義連接或投影的查詢中不受支持。在這種情況下不支持意味着它被完全省略。

相關問題