向多对多关系添加一列 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; }
}
我有 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
中明确加入了 tablepublic 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; }
}