2011-04-07 96 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