c# - Entity Framework 中的 3 种方式多对多

标签 c# entity-framework

我有 3 个数据表和在它们之间映射的第四个表,即 3 个 ID,所有三列都作为主键。

我真正想要的是对象 A 包含一个列表,其中 B 是一个包含列表的对象。我会选择 A 中 B 和 C 的二维数组。

有没有办法做到这一点?我这样做是不是错了?

最佳答案

在典型的多对多情况下,连接表只有组合键(两个主键字段),Entity Framework 将直接向相关实体添加导航属性。但是,当连接表有额外的字段时, Entity Framework 会为连接表创建一个实体,这样您就可以“获取”额外的信息。

在您上面描述的情况下, Entity Framework 将为您的“连接”表生成一个实体,该表将关联到您的所有 3 个对象。

我使用实体 Item1、Item2、Item3 和 Link 创建了一个示例。

从数据库的角度来看,如果我有一个 Item1 的 ID,我可以用类似的东西查询表:

select Item1ID, Item2ID, Item3ID from Link where Item1ID = 1

这将为我提供与 Item1 #1 关联的 Item2、Item3“对”列表。使用 Linq to Entities,我可以通过执行以下操作类似地查询 EF 模型:

var q =
    from link in context.Link
    where link.Item1ID == 1
    select new { link.Item1, link.Item2, link.Item3 };

或者,如果我已经有一个 Item1 对象,我想为其获取关系:

item1.Link.Select(l => new { l.Item1, l.Item2, l.Item3 });

这些只是基本示例,但您可以轻松地使用 LINQ 扩展方法和 IQueryable 来根据自己的喜好转换/分组数据。

如果你能提供更多关于你的案例的细节,我可以给你更具体的例子。希望对您有所帮助!

蒂姆

关于c# - Entity Framework 中的 3 种方式多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709300/

相关文章:

c# - Exchange Web 服务 : why is ItemId not constant?

c# - 获取 "text+space+number"的子字符串并修剪其余部分

c# - NET 5 和 EF : how to use AddPooledDbContextFactory in liu of DbContext in services

c# - Entity Framework Code First - 确定数据类型

entity-framework - Entity Framework 4.1 批量更新

c# - 在 C# 中检测可空类型

c# - linq中的加入子句

c# - 我已经开始学习 Entity Framework ,并面临问题。我有一个模型类,但无法建立 Entity Framework 连接

c# - 如何在 .NET Core 1.0 中使用 Entity Framework 运行 sql 脚本?

c# - Entity Framework 查询 super 慢