所以我有很多rooms
可以包含任意数量的devices
。那些devices
可以在许多rooms
中。这很简单。现在,我需要能够将同一device
的多个实例添加到单个room
。也就是说,给定房间可能具有相同投影仪模型的多个实例。
事实证明这很难做到。我的第一个想法是在连接表中添加一个简单的count
列,但根据此answer,这样做并不简单。也许我会回到这个解决方案,但现在我想看一个B计划。
计划B只涉及在同一房间中添加包含相同设备的多行。像这样......
for(var i = 0; i < newDevice.count; i++)
{
room.Devices.Add(device);
}
......这不起作用。 `.Add(device)只会添加一行,无论我循环多少次。 This question可能是相关的。
在这种情况下,如何将同一行的多个实例添加到Rooms_Devices
表?
编辑清晰度:
我正在寻找的是一种为我的多对多表创建多行相同数据的方法。也就是说,我希望我上面的代码片段产生类似于这样的行:
Rooms_Devices
---------------------------
id | room_id | device_id
1 | 22 | 38 <--- same room, same device, three times
2 | 22 | 38
3 | 22 | 38
上面的代码反而产生了这个:
Rooms_Devices
---------------------------
id | room_id | device_id
1 | 22 | 38 <----just one row, not three
问题是.Add()
不想多次创建同一行(显然)。我正在使用实体框架。
编辑答案:
下面的答案是正确的,但它对我没有直接意义,因此我将总结:在多对多连接表中,ID对(room_id
,{{1} })必须是唯一的,所以我试图做的事情无法完成。如果要将列添加到多对多关系,则必须为该表构建模型。也就是说,我现在有一个device_id
模型。这需要更改一堆其他代码(并使代码更难以阅读),但它似乎是唯一的方法。
答案 0 :(得分:2)
也就是说,给定的房间可能有多个相同的实例 投影机型号。
如果我理解你,那么你会想要考虑一个稍微不同的设计。每个物理设备的设备表都有一行。同一个物理设备不能在同一个房间内两次,因此不能同时在两个房间内。
您可以拥有设备类型表,其中每个模型或模型组(对于类似模型)都有一行。
然后很容易对房间,设备类型,计数进行查询分组,而无需更新关联实体(RoomsDevices)上的“count”字段。
当加入设备类型时,数据看起来像这样,设备类型是从设备表中键入的。我会添加它,好像它是为了演示而加入的:
Rooms_Devices
-------------------------------------------
id | room_id | device_id | devicetypeid
1 | 22 | 3 | 38
2 | 22 | 4 | 38
3 | 22 | 5 | 38
对此的查询将产生:
room_id | devicetype_id | Count
22 | 38 | 3