entity-framework - 不确定如何映射多对多关系 - 重用不同实体的映射表

标签 entity-framework ef-code-first mapping many-to-many entity-framework-5

我对映射以下关系感到困惑。

我有以下三个相关实体:UserGroupGroupUser

User 包含有关用户帐户的信息,group 有关组的信息,GroupUser 包含有关用户在组中的成员身份的信息.

public class User
{
    List<GroupUser> Groups { get; set; }
}

public class Group
{
    List<GroupUser> Users { get; set; }
}

public class GroupUser
{
    Group Group { get; set; }
    User User { get; set; }
    string Position { get; set; }
    DateTime Joined { get; set; }
}

我在 User 组中创建了一个单边映射:

        HasMany(x => x.Groups)
        .WithMany()
        .Map(m =>
        {
            m.ToTable("UserGroups");
            m.MapLeftKey("UserId");
            m.MapRightKey("GroupId");
        });

但是,当我尝试在 Group

中再次映射它时
        HasMany(x => x.Users)
        .WithMany()
        .Map(m =>
        {
            m.ToTable("UserGroups");
            m.MapLeftKey("GroupId");
            m.MapRightKey("UserId");
        });

我收到以下错误:

Schema specified is not valid. Errors: 
(274,6) : error 0019: The EntitySet 'UserUserGroup' with schema 'dbo' and table 'UserGroups' was already defined. Each EntitySet must refer to a unique schema and table.

我想重用两个实体之间的映射表,我该怎么做?

最佳答案

您使用的映射适用于联结表 (UserGroups) 不是概念(类)模型的一部分的情况。在这样的情况下User应该有一个 List<Group>Group应该有一个 List<User> . (旁注:建议使用 ICollection<>)。

但是你有 class GroupUser在你的模型中,所以它已经被映射(显然你将它映射到其他地方的 UserGroups)。

在您的情况下,将联结表拉入概念模型是合理的,因为它不仅包含与其连接的表的两个 FK。代价是您无法为多对多关联建模。

如果你想得到Group User的小号你必须使用像

这样的查询
var groups = context.Users.Where(u => u.UserId == 1)
                    .SelectMany(u => u.Groups)
                    .Select(ug => ug.Group)

关于entity-framework - 不确定如何映射多对多关系 - 重用不同实体的映射表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17160138/

相关文章:

entity-framework - Entity Framework : Conditional foreign key

c# - 在此上下文中仅支持实体类型、枚举类型或原始类型

entity-framework - Entity Framework 代码首先不使用 VS 2012 创建表

c# - Entity Framework 4.1 支持上下文的模型在创建数据库后立即发生了变化

c# - Entity Framework 表拆分 : not in the same type hierarchy/do not have a valid one to one foreign key relationship

scala - 获取字符串并使用特定分隔符创建字典的功能方法

javascript - 删除重复项并按最常见的标签对数组进行排序

c# - AspNetCore.Identity 不适用于自定义用户/角色实现

.net - 为什么 ORM 不支持 IoC 容器

c# - EF4 代码优先 : how to update specific fields only