c# - 如何首先使用代码向链接表添加列

标签 c# entity-framework-4.1 code-first

我有一个与主题实体具有多对多关系的 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 属性。
  • 删除多对多映射
  • 而是在 DatabaseSubjectResearchDatabase(一个 ResearchDatabase 有多个 DatabaseSubject)之间以及 DatabaseSubject 之间创建两个一对多关系>主题(一个主题有多个数据库主题)。

此类场景的更详细描述如下:Create code first, many to many, with additional fields in association table

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

相关文章:

c# - 如何从linq中的多个日期列中获取最小值?

c# - Entity Framework : Model Contain A list(navigational properties) of three items of type= itself , 给出错误。 (可能是外键映射错误)

c# - EF 4.1 - 如果不存在则插入实体,否则使用现有实体 - 如何?

c# - 如何在 C# MVC 中创建引用另一个模型两次的代码优先模型?

entity-framework - 违反了 SQL Server 2008 的多重约束 - CodeFirst

c# - 使用 Entity Framework 加载嵌套实体/集合

c# - ASP.NET 在 GridView 中配置更新按钮

c# - 为什么匿名方法不能赋值给var?

c# - P/Invoke - 如何使用将地址返回到 double 组的 c 函数的结果来使访问加倍

c# - DbSet.FirstOrDefault()?