同一个表中的Entity Framework中的一对多关系

时间:2010-12-19 01:37:20

标签: linq entity-framework many-to-many entity one-to-many

我有两个表,其中一个用户可以拥有多个联系人:

User(UserId, UserName)
Contact(UserId, ContactId)

假设我想通过Userid获取用户表中UserNames的所有ContactNames。

请注意,在当前数据上下文中无法看到Contact表,它已经变成了多对多的关系

我该如何进行查询?

如果我需要插入或删除怎么办?

我尝试了“include”方法,但它不起作用。你有什么建议吗?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

var id = 1; // id to find
context.Users
     .Where(x=>x.UserId = id)
     .SelectMany(x=>x.Users)
     .Select(x=>x.UserName)
     .ToArray();

alt text

从db生成后,您的模型有2个子集合:Users和Users1。

  1. 其中一个对应于用户,即当前用户的联系人。
  2. 另一个存储当前用户联系的用户。
  3. 您可以通过编辑器重命名它们以表示对Contacts和ContactsFor的含义。

    alt text

    如果你仍然希望有2种类型而不是Type +(多对多参考),那么在编辑器中你可以删除引用,创建新实体联系人,设置所有映射,添加引用。完成所有这些后 - 您将看到如下模型: alt text

    实现这一目标:

    1. 删除多对多参考
    2. 克里特岛新实体Contact
    3. 添加属性ContactId和UserId,将StoreGeneratedPattern设置为
    4. 添加Contact
    5. 的映射
    6. 为Contacts和ContactFor添加关联
    7. 但这并不容易。