我有一个与Subject实体具有多对多关系的ResearchDatabase实体。即研究数据库属于一个或多个主题类别,主题类别包含一个或多个研究数据库。
在我的ResearchDatabaseConfiguration文件中,我有以下映射:
HasMany(rd => rd.Subjects) .WithMany(s => s.ResearchDatabases) .Map(m => { m.MapLeftKey("DatabaseId"); m.MapRightKey("SubjectId"); m.ToTable("DatabaseSubjects"); });好的,没问题。作品。创建一个链接表。
现在我收到了新规范。每个主题的研究数据库的排序将按字母顺序与最相关的(由用户认为)分开,接着是第二组'如果你没找到它,也尝试这些'数据库,也按字母顺序排列。所以,基本上,我需要另一列来表示数据库是在第一组还是第二组。类似于IsPrimary列的东西,或类似链接表本身内部的东西。我希望这是有道理的。
但是,如何在从上面的映射代码创建的链接表中添加一个额外的列?
答案 0 :(得分:3)
这是不可能的。多对多连接表由Entity Framework在内部管理,它必须只包含两个键列。您无法自定义此表。
您需要做的是:
public class DatabaseSubject
或其他内容)。您可以根据需要自定义此实体,例如添加IsPrimary
属性。DatabaseSubject
和ResearchDatabase
(一个ResearchDatabase有许多DatabaseSubject)之间以及DatabaseSubject
和Subject
之间创建两个一对多关系(一个Subject有许多DatabaseSubjects )。此类情景的更详细说明如下:Create code first, many to many, with additional fields in association table