1

我正在尝试使用我继承的遗留 MS SQL 数据库使用 Entity Framework 4.0 构建通用存储库。很熟悉的场景。

我需要将类别信息添加到相当长的现有项目列表中。

这些项目可以同时属于多个类别,因此我创建了一个名为CategoryMapping的映射表

数据库图

不幸的是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()
 );

如何在不消除现有数据库结构的情况下以最有效的方式链接我的表和映射?

4

1 回答 1

0

它不能以这种方式工作,因为 EF 不支持唯一键并且SchemaDefinitionCode必须是唯一的才能与Category. 如果您SchemaDefinitionCode在表中不是唯一的,DefinitionSchema则不能将其用作与CatagoryMapping. 如果它是唯一的,您可以使用它,SchemaDefinitionID因为只有一个 Id 将具有相同的代码值。

于 2011-04-07T18:34:19.100 回答