ORM и отношения многие ко многим - PullRequest
3 голосов
/ 17 марта 2011

Это более или менее общий вопрос, а не о каком-либо конкретном 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);}
}

Но это тоже кажется неправильным.

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Я рассматриваю отображения «многие ко многим» как просто обозначение для двух отображений «один ко многим» с промежуточной таблицей, как вы ее называете, что позволяет упростить отношения. Это работает только тогда, когда отношения не имеют собственных атрибутов. Однако по мере улучшения понимания конкретной области я обычно обнаруживаю, что сопоставления «многие ко многим» обычно необходимо разбивать, чтобы разрешить прикрепление атрибутов. Поэтому мой обычный подход в эти дни - всегда просто использовать сопоставления один ко многим.

0 голосов
/ 20 марта 2011

Я не думаю, что ваш обходной путь неправильный.Сложности этих моделей должны быть закодированы где-то .

У меня есть пост в блоге на эту тему: Отношения многие-ко-многим со свойствами

...