我有一个与主题实体具有多对多关系的 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)类 DatabaseSubject
或其他内容)。您现在可以根据需要自定义此实体,例如添加IsPrimary
属性。 - 删除多对多映射
- 而是在
DatabaseSubject
和ResearchDatabase
(一个 ResearchDatabase 有多个 DatabaseSubject)之间以及DatabaseSubject
和之间创建两个一对多关系>主题
(一个主题有多个数据库主题)。
此类场景的更详细描述如下:Create code first, many to many, with additional fields in association table
关于c# - 如何首先使用代码向链接表添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7404573/