我有 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/