Это более или менее общий вопрос, а не о каком-либо конкретном ORM или конкретном языке: этот вопрос возникает независимо от ваших предпочтений ORM.
При отображении отношения «многие ко многим» можно скрыть промежуточную таблицу или сделать промежуточную таблицу частью вашей модели. В том случае, если в промежуточной таблице есть ценные данные, выходящие за пределы взаимосвязи, как вы обрабатываете сопоставление?
Рассмотрим следующие таблицы:
CaseWorker (id, first_name, last_name)
CaseWorkerCases (case_worker_id, case_id, date_opened, date_closed)
Case (id, client_id, field_a, field_b)
Как программист, я бы действительно хотел:
CaseWorker.Cases
чем
CaseWorker.CaseWorkerCases.Cases
С одной стороны, таблица CaseWorkerCases содержит полезные данные, а скрытие промежуточной таблицы делает доступ к этим данным менее удобным. С другой стороны, необходимость перемещаться по промежуточной таблице делает обычную задачу доступа к Делам неудобной.
Я полагаю, что одним из решений может быть предоставление промежуточной таблицы в модели и затем предоставление объекту CaseWork свойства оболочки, которое могло бы работать. Что-то вроде:
public IEnumerable<Case> Cases
{
get{return (from caseWorkerCase in this.CaseWorkerCases
select caseWorkerCase.Case);}
}
Но это тоже кажется неправильным.