2011-04-07 93 views
1

我想使用實體框架4.0使用我繼承的遺留MS SQL數據庫來構建通用資源庫。一個非常熟悉的場景。實體框架4.0使用非主鍵的多關係

我需要將類別信息添加到相當長的現有項目列表中。

的項目可以同時屬於幾個類別,所以我創建了一個名爲CategoryMapping

Database Diagram

的映射表,不幸的是SchemaDefinitionCode不是唯一的,不能做成一個外鍵( FK)在數據庫中。

我試圖將我自己的部分類添加到DefinitionSchema實體,但因爲它沒有編入索引,所以這會造成嚴重的性能下降。測試演示代碼,我不會要創建一個新的上下文每次我打開這個

public partial class DefinitionSchema 
{ 
    private MyEntities context; 

    public IQueryable<Category> Categories 
    { 
     get 
     { 
      context = new MyEntities(); 

      var categories = context.Categories 
              .Where(c => c.CategoryMappings 
               .Where(m => m.SchemaDefinitionCode == this.SchemaDefinitionCode).Any()); 

      return categories; 
     } 
    } 
} 

我可以調用像這樣的項目清單:

var q = context.SchemaDefinitions 
.Where(s => s.Categories 
    .Where(c => c.Name == category) 
    .Any() 
); 

哪有我以最有效的方式鏈接我的表和映射而不清除現有的數據庫結構?

回答

0

它不能以這種方式工作,因爲EF不支持唯一鍵,並且SchemaDefinitionCode必須是唯一的,才能與Category形成有效的多對多關係。如果您的SchemaDefinitionCodeDefinitionSchema表中不唯一,則它不能用作與CatagoryMapping的關係中的主要目的。如果它是唯一的,則可以使用SchemaDefinitionID,因爲不再有一個Id具有相同的代碼值。

+0

感謝您的回答。我將通過將SchemaDefinitionCode更改爲SchemaDefinitionId來解決此問題。 – 2011-04-08 11:35:48