【问题标题】:Entity Framework model.edmx and many to many relationships实体框架 model.edmx 和多对多关系
【发布时间】:2012-10-19 12:28:27
【问题描述】:

在数据库中,我有 3 个表,用户、组和一个查找表 UserGroup,其中包含 UserID 和 GroupId。

我创建了一个 model.edmx,它允许我: var users = context.User var groups = context.Group 但不会为 context.UserGroup 创建对象。

获取组中的所有用户以及用户所属的所有组的语法是什么?

var results = from groups in db.Groups.Where(t => t.Users(u => u.UserID ==1))
select groups;

【问题讨论】:

    标签: linq entity-framework linq-to-entities


    【解决方案1】:

    如果您设置了正确的键,EF 将隐藏您的联结表,并创建一个导航属性来建立表之间的连接

    获取用户所属的所有组:

    var groupResults = db.Groups.Where(g => g.Users.Select(u => g.UserId).Contains(userId));
    

    以及获取所有用户:

    var userResults = db.Users.Where(u => u.Groups.Select(g => g.GroupId).Contains(groupId));
    

    【讨论】:

    • 不,g.UserID 不存在,反之亦然。
    • 更新了代码——它不是很漂亮,但是您可以为每个组选择 id,然后如果用户在那里返回它
    • 连接表是如何隐藏的? @MarkOreta。我必须加入 3 个表,所有三个表都有字段ID (pk); Name;IsActive,我的联结表是OrganizationSateCities -OrganizationID -StateID -CityID 我怎样才能做到这一点?目前它没有隐藏联结表,而是在objectOrganization 中显示OrganizationSateCities 的集合
    【解决方案2】:

    不会创建联结表。您将获得两个导航集合属性。用户实体中的组和组实体中的用户。

    从一个组中获取所有用户:

    var usersInGroup = context.Groups.Where(g => g.ID == groupId).SelectMany(g => g.Users);
    

    获取用户所属的所有组:

    var groupsOfUser = context.Users.Where(u => u.ID == userId).SelectMany(u => u.Groups);
    

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多