我有兩個具有多對多關係的實體,我正在尋找一種方法來排序表中的結果。
換句話說,當我從table1獲取一行並從table2獲取所有相應的記錄時,我希望能夠爲table1中的該行特定的table2存儲排序順序。實體框架:排序多對多
我的第一個想法是在代表關係的表中添加一個排序列,但據我所知,沒有辦法訪問關係中的新列。
有沒有人有任何建議如何做到這一點?
我有兩個具有多對多關係的實體,我正在尋找一種方法來排序表中的結果。
換句話說,當我從table1獲取一行並從table2獲取所有相應的記錄時,我希望能夠爲table1中的該行特定的table2存儲排序順序。實體框架:排序多對多
我的第一個想法是在代表關係的表中添加一個排序列,但據我所知,沒有辦法訪問關係中的新列。
有沒有人有任何建議如何做到這一點?
謝謝大家對我的問題的好的答案。我現在對於不同解決方案的優缺點更加自信。
我最終做的是這樣的:事實證明,只是向關係表添加一個排序列不會影響模型,從數據庫更新仍然有效,並且該表仍然被映射爲多對多多種關係。然後我創建了一個存儲過程,從關係表中提取排序列,並創建另一個存儲過程來更新指定記錄的排序索引。
您可以將新列添加到聯結表中,但該表將成爲一個新實體,因此您的模型現在將包含三個實體,其中兩個一對多關係而不是兩個實體和單個多對多關係。
正如Ladislav Mrnka所述,如果將新列添加到聯結表中,那麼會出現一個「中間」的新實體,這將導致導航更加困難。
如果您想要避免這種情況,但仍然可以像往常一樣進行導航,您可以保留聯結表並添加一個新表,就像添加了訂單列的聯結一樣。當您需要訂單信息時,您可以加入此表以獲取並使用它。
這張新表當然需要一些維護。即您可以爲交匯點+訂單到交匯點表創建級聯刪除。並使用一個觸發器(ooops,這不好!)創建一個新的行,併爲每個新創建的關係預設順序。所以,在你的業務邏輯中處理這個問題會更明智。
我知道這太棘手,但沒有神奇的解決方案......只是選擇什麼更舒適。
由於您的排序按表1的行表2的結果的要求,而不是全球範圍內,你有三個不優雅的解決方案:
的方法拉吉斯拉夫建議(與難看模型) - 添加順序列, 添加橋樑實體。
JotaBe建議的方法(與壞看模式) - 添加一個額外的表,並保持兩個。
如果上下文用於只讀取(無需改變的關係),你不介意從DB每次更新後手動更改EDMX,那麼你可以黑掉emdx和改變SSDL將關係表定義爲SQL查詢,例如
<EntitySet Name="AS_TO_BS" EntityType="BlaBla.Store.AS_TO_BS">
<DefiningQuery>
SELECT ID1, ID2 ORDER BY ORDERVALUE
FROM AS_TO_BS
</DefiningQuery>
</EntitySet>
相反的:
<EntitySet Name="AS_TO_BS" EntityType="BlaBla.Store.AS_TO_BS"
store:Type="Tables" Schema="MY_SCHEMA" />
看看你是否可以放鬆你的要求,如果沒有則在這三個解決方案之一定居。
編輯:
另一個想法:
其他解決方案無意違反,所有3種解決方案都不理想。如果EF支持將關係和實體同時映射到同一個表,最好的解決方案是。 –
您是否想對table1行或全局排序table2結果? –
@DannyVarod每table1行。 – JonC