所以我有很多rooms
可以包含任何數量的devices
。那些devices
可以在很多rooms
。這是非常簡單的。現在我需要能夠將同一device
的多個實例添加到單個room
。也就是說,給定的房間可能有多個相同投影儀型號的實例。與同一項目的多個實例的多對多關係
這證明令人驚訝地很難做到。我的第一個想法是在連接表中添加一個簡單的count
列,但根據這個answer,這樣做並不簡單。也許我會回到這個解決方案,但現在我想看看一個計劃B.
計劃B將只涉及在同一個房間添加包含相同設備的多行。像這樣的東西...
for(var i = 0; i < newDevice.count; i++)
{
room.Devices.Add(device);
}
...哪個行不通。無論我循環多少次,.Add(設備)只會添加一行。 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
,device_id
)必須是唯一的,所以我試圖做的事情是無法完成的。如果您想將列添加到多對多關係中,則必須爲該表構建模型。也就是說,我現在有一個Devices_Rooms
模型。這需要更改一堆其他代碼(並且使代碼更難以閱讀),但這似乎是唯一的方法。
這似乎是在您的SQL查詢ROW_NUMBER加入ROW_NUMBER()OVER(PARTITION BY房ORDER BY ???)可以解決您的問題,因爲它可以逐個計算您的結果集。但我不確定我是否理解您計劃如何使用這些信息。 – Matt
現在,_getting_信息不是問題。我不知道如何創建表格中的行。我是否理解評論? – crowhill
所以你更擔心如何維護數據。基於你的問題中的鏈接,你可能會使用實體框架。如果不通過計數列來完成,您只需在代碼的多對多關係表上維護一個身份密鑰,並將該身份傳遞給刪除/更新語句,插入操作將自動將其返回給您。如果你想通過計數來完成,你只需要自定義更新,插入,刪除語句來執行相應的命令(例如,當記錄存在時更新而不是插入,並增加1) – Matt