[英]Automapper - Bestpractice of mapping a many-to-many association into a flat object
[英]BestPractice: How to display a many-to-many association in a view in a clean way?
我正在使用NHibernate,並且在員工和團隊之間存在多對多關聯。
現在,我要顯示所有員工及其團隊成員的姓名。
可能性1:
可能性2:
可能性3:
可能性4:
可能性5:
解決此問題的最佳做法是什么?
還有其他建議嗎?
這聽起來像是UI的噩夢,但是您可以將員工列表傳遞給視圖。 然后,在一個循環遍歷員工的循環中,有一個循環遍歷團隊的嵌套循環。 在Asp.Net MVC中看起來像這樣-
<table>
<thead>
<tr>
<td>Employee</td>
<td>Team</td>
</tr>
</thead>
<% foreach(var employee in Model.Employees) { %>
<% foreach (var team in employee.Teams) { %>
<tr>
<td><%=employee.Name %></td>
<td><%=team.Name %></td>
</tr>
<% } %>
<% } %>
</table>
在以下情況下,您將使用ViewModel(DTO)-
我會避免選擇第二種方法,因為它只會給您的域增加不必要的復雜性(從我提供的當前信息中可以推斷出):-)
更新
如果您希望不顯示任何團隊的員工,則可以在視圖中進行設置...
<table>
<thead>
<tr>
<td>Employee</td>
<td>Team</td>
</tr>
</thead>
<% foreach(var employee in Model.Employees) { %>
<tr>
<% if (employee.Teams.Any()) { %>
<td><%=employee.Name %></td>
<td> - </td>
<% } else { %>
<% foreach (var team in employee.Teams) { %>
<td><%=employee.Name %></td>
<td><%=team.Name %></td>
<% } %>
<% } %>
</tr>
<% } %>
</table>
顯然,這樣的UI調整越多,您越有可能想要使用ViewModel來清理View。 如果由於內聯代碼引用的數量而發現視圖開始變得不可讀,則通常表明ViewModel(DTO)適用:-)
這取決於您是否要嚴格使用DTO將業務邏輯與表示邏輯(體系結構決策)分開。 在這種情況下,我希望使用解決方案1。
如果您對EmployeeTeam這樣的實體有行為,或者會有重用(例如在報告中),那么我更喜歡解決方案2。
使用要顯示為屬性的字段創建一個視圖dto。 使用自動映射器-將實體屬性映射到新的dto:
Mapper.CreateMap<Obj1, NewObjDto>()
.ForMember(dest => dest.Prop1, opt => opt.MapFrom(src => src.Obj1.Prop1));
換句話說-您的視圖dto不必類似於域對象。
女://
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.