如何首先使用代码将列添加到链接表
我有一个与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
属性。 - 删除多对多映射
- 而是在
DatabaseSubject
和ResearchDatabase
(一个ResearchDatabase有许多DatabaseSubject)之间以及DatabaseSubject
和Subject
之间创建两个一对多关系(一个Subject有许多DatabaseSubject)。
这种情况的更详细描述如下: 首先创建代码,多对多创建代码,并在关联表中添加其他字段