如何首先使用代码将列添加到链接表

时间:2011-09-13 15:35:28

标签: c# entity-framework-4.1 code-first

我有一个与Subject实体具有多对多关系的ResearchDatabase实体。即研究数据库属于一个或多个主题类别,主题类别包含一个或多个研究数据库。

在我的ResearchDatabaseConfiguration文件中,我有以下映射:

HasMany(rd => rd.Subjects)
                .WithMany(s => s.ResearchDatabases)
                .Map(m =>
                    {
                        m.MapLeftKey("DatabaseId");
                        m.MapRightKey("SubjectId");
                        m.ToTable("DatabaseSubjects");
                    });
好的,没问题。作品。创建一个链接表。

现在我收到了新规范。每个主题的研究数据库的排序将按字母顺序与最相关的(由用户认为)分开,接着是第二组'如果你没找到它,也尝试这些'数据库,也按字母顺序排列。所以,基本上,我需要另一列来表示数据库是在第一组还是第二组。类似于IsPrimary列的东西,或类似链接表本身内部的东西。我希望这是有道理的。

但是,如何在从上面的映射代码创建的链接表中添加一个额外的列?

1 个答案:

答案 0 :(得分:3)

这是不可能的。多对多连接表由Entity Framework在内部管理,它必须只包含两个键列。您无法自定义此表。

您需要做的是:

  • 在您的模型中引入一个新实体,该实体表示连接表中的数据(public class DatabaseSubject或其他内容)。您可以根据需要自定义此实体,例如添加IsPrimary属性。
  • 删除多对多映射
  • 而是在DatabaseSubjectResearchDatabase(一个ResearchDatabase有许多DatabaseSubject)之间以及DatabaseSubjectSubject之间创建两个一对多关系(一个Subject有许多DatabaseSubjects )。

此类情景的更详细说明如下:Create code first, many to many, with additional fields in association table