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

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

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

 HasMany(rd => rd.Subjects)
                 .WithMany(s => s.ResearchDatabases)
                 .Map(m =>
                     {
                         m.MapLeftKey( “DatabaseId”);
                         m.MapRightKey( “SubjectId”);
                         m.ToTable( “DatabaseSubjects”);
                     });

好的,没问题。 作品。 创建一个链接表。

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

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

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

你需要做的是:

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

这种情况的更详细描述如下: 首先创建代码,多对多创建代码,并在关联表中添加其他字段