gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:53:20 26 4
gpt4 key购买 nike

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

我有以下三个相关实体: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com