在多对多关系中映射查找/连接表实体

本文关键字:连接 实体 查找 映射 关系 | 更新日期: 2023-09-27 18:11:52

我正试图映射一个多对多关系包括查找/连接表实体,我遇到了一些麻烦。以下是我的(基本)模型:

public class User
{
    public int UserId { get; set; }
    public IList<UserGroupCode> Codes { get; set; }
}
public class Group
{
    public int GroupId { get; set; }
    public IList<UserGroupCode> Codes { get; set; }
}
public class UserGroupCode
{
    public int UserGroupCodeId { get; set; }
    public int UserId { get; set; }
    public int GroupId { get; set; }
    public string Value { get; set; }
}

这是我一直在使用的User的配置

HasMany(p => p.Codes).WithMany().Map(m =>
{
    m.ToTable("UserGroupCodes");
    m.MapLeftKey("UserId");
    m.MapRightKey("UserGroupCodeId");
});

我看过很多关于如何映射不包括查找表作为实体的多对多关系的文章(典型的例子是用户-角色关系)。但是,正如您所看到的,我的UserGroupCode关系上有一个Value属性,这需要该关系是一个实际的实体。

在多对多关系中映射查找/连接表实体

我终于看到了这篇文章。我在UserGroupUserGroupCode模型中添加了导航属性。

public class UserGroupCode
{
    public int UserGroupCodeId { get; set; }
    public int UserId { get; set; }
    public User User { get; set; }
    public int GroupId { get; set; }
    public Group Group { get; set; }
    public string Value { get; set; }
}

关系所需的唯一配置是在UserGroupCode实体上:

HasRequired(p => p.User).WithMany(p => p.Codes).HasForeignKey(p => p.UserId);
HasRequired(p => p.Group).WithMany(p => p.Codes).HasForeignKey(p => p.GroupId);