【问题标题】:one to many relationship in Entity Framework on the same table实体框架中的一对多关系在同一张表上
【发布时间】:2010-12-19 01:37:19
【问题描述】:

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

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

假设我想通过用户 ID 从用户表中的用户名中获取所有联系人姓名。

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

如何查询?

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

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

非常感谢。

【问题讨论】:

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


    【解决方案1】:
    var id = 1; // id to find
    context.Users
         .Where(x=>x.UserId = id)
         .SelectMany(x=>x.Users)
         .Select(x=>x.UserName)
         .ToArray();
    

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

    1. 其中一个对应于用户,即当前用户的联系人。
    2. 另一个存储用户,当前用户是联系人。

    您可以通过编辑器重命名它们以表示它们对 Contacts 和 ContactsFor 的含义。

    如果您仍然希望有 2 种类型而不是 Type+(Many-To-Many Ref),那么在编辑器中您可以删除引用、创建新实体联系人、设置所有映射、添加引用。完成所有这些之后 - 您将拥有如下所示的模型:

    实现这一目标:

    1. 删除多对多引用
    2. 克里特岛新实体Contact
    3. 添加属性 ContactId 和 UserId,将 StoreGeneratedPattern 设置为 none
    4. Contact 添加映射
    5. 为联系人和联系人添加关联

    但这并不容易。

    【讨论】:

    • 我的问题是:在实体框架中,第二个表“联系人”在“用户”表中变成了多对多的关系。我在当前上下文中找不到表格联系人。
    • 啊,据我了解:生成模型后只有 1 个类型 + 1 个多对多引用。我对吗?如果是这样,我的答案中的第二个示例仍然应该有效。
    • 看起来很优雅很好看……终于明白了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2023-04-04
    • 2013-11-24
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多