Давайте зададим другой вопрос: что, если ваше приложение должно отображать категории в древовидном представлении , которое при расширении узла категории будет перечислять все продукты? Если вы хотите отобразить все продукты, нет другого способа, кроме ... запроса к базе данных и загрузки всех продуктов.
На самом деле это довольно распространенный сценарий реальной жизни, и один из самых простых подходов - просто иметь свойство Category.Products
. Конечно, нет ничего плохого в том, чтобы иметь такое свойство, но реальный вопрос в том, как вы должны управлять этими объектами.
К счастью, вам не нужно тянуть все продукты с одной категорией. Category.Products
можно пометить как загрузить лениво (в отличие от с нетерпением , больше информации можно найти здесь ). Это означает, что категория загрузки не будет запрашивать базу данных для своих продуктов. Вместо этого NHibernate создаст прокси объект для Products
, который можно инициализировать позже - когда они действительно необходимы (например, пользователь расширяет узел категории).
И чтобы ответить на ваш вопрос ...
Если отдельный продукт привязан к точно одной категории , то это хороший пример из реальной жизни отношения один ко многим. Однако, если продукт можно описать более чем одной категорией, тогда это отношение многие ко многим .