向多对多关系添加一列 table 先代码 entity framework

Add a column to a many to many relation table code first entity framework

我有 2 个 class 具有多对多关系。

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 字段。所以我在另一个 class

中明确加入了 table
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; }   
}

但是当我更新数据库时,最后一个 class 的 table 将没有 SortOrder 列。它只包含 2 个外键。我如何告诉 EF 使用我的专栏生成此 table?

当多对多关联中的联结点 table 应包含比两个外键更多的信息时,不再可能将关联映射为 'pure' 多对多关联-很多(隐藏连接 class)。

您需要 class 模型中的显式 class 来处理额外信息(正如您已经发现的那样),但这也会将关联更改为 1-n-1:

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

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