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

在我的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)。


这种情况的更详细描述在这里:Create code first, many to many, with additional fields in association table

关于c# - 如何首先使用代码向链接表添加列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7404573/

10-12 20:57