将列添加到多对多关系表代码的第一个实体框架中

时间:2015-08-13 09:09:37

标签: ef-code-first entity-framework-6 ef-migrations

我有两个有很多关系的课程。

public class Document
{
    public int Id { get; set; }

    public string Name { get; set; }

    public bool AvailableOffline { get; set; }

    public string URL { get; set; }

    public virtual ICollection<Profile> Profiles { get; set; }

}

public class Profile
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    public virtual ICollection<Document> Documents { get; set; }
}

在每个配置文件中,我希望每个文档都有一个SortOrder字段。所以我在另一个类

中明确了连接表
public class ProfileDocuments
{
    [Key, Column(Order = 0)]
    public int DocumentId { get; set; }

    [Key, Column(Order = 1)]
    public int ProfileId { get; set; }

    public int SortOrder { get; set; }

    [ForeignKey("DocumentId")]
    public virtual Document Document { get; set; }

    [ForeignKey("ProfileId")]
    public virtual Profile Profile { get; set; }   
}

但是当我更新数据库时,最后一个类的表将没有SortOrder的列。它只保存2个外键。如何告诉EF使用我的列生成此表?

1 个答案:

答案 0 :(得分:0)

当多对多关联中的联结表应包含的信息多于两个外键时,不再可能将关联映射为“纯”多对多(隐藏联结类)

您需要在类模型中使用显式类来解决额外信息(如您已经发现的那样),但这也会将关联更改为1-n-1

class Document
{
    ...
    public virtual ICollection<ProfileDocument> ProfileDocuments { get; set; }
}

class Profile
{
    ...
    public virtual ICollection<ProfileDocument> ProfileDocuments { get; set; }
}