2011-09-13 124 views
2

我有一个与Subject实体具有多对多关系的ResearchDatabase实体。即研究数据库属于一个或多个主题类别,而主题类别包含一个或多个研究数据库。如何使用代码优先将列添加到链接表

在我ResearchDatabaseConfiguration文件我有以下映射:

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

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

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

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

回答

3

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

你需要做的是:

  • 引入一个新的实体进入你的模型,它代表了连接表(public class DatabaseSubject或某物)的数据。您可以随意自定义此实体,例如添加IsPrimary属性。
  • 取下许多一对多映射
  • 而是创建DatabaseSubjectResearchDatabase(一个ResearchDatabase有很多DatabaseSubjects)之间和DatabaseSubjectSubject之间(一个主题有很多DatabaseSubjects)两个一到多的关系。

这样的场景的更详细的描述是在这里:Create code first, many to many, with additional fields in association table

+0

谢谢。经过更多调查,我开始得出同样的结论。感谢您提供一些步骤,并链接到其他帖子。现在,该做一点小小的重构了! – adimauro

相关问题