много-много проблем производительности с беглым nhibernate - PullRequest
1 голос
/ 20 марта 2011

У меня есть ситуация, когда у меня есть несколько ассоциаций «многие ко многим». От 12 до 15. Читая вокруг, я видел, что обычно считается, что ассоциации «многие ко многим» не являются «типичными», но это единственный способ, которым я смог создать ассоциации, подходящие для моего случая, поэтому я не уверен, как оптимизировать дальше.

Вот мой основной сценарий.

class Page {
  IList<Tag> Tags { get; set; }
  IList<Modification> Modifications { get; set; }
  IList<Aspect> Aspects { get; set; }
}

Это один из моих «базовых» классов и, по совпадению, одна из моих базовых таблиц. Практически половина объектов в моем коде может иметь IList<Page>, а некоторые из них имеют IList<T>, где T имеет свой собственный IList<Page>.

Как видите, с объектно-ориентированной точки зрения это на самом деле не проблема. Но с точки зрения базы данных это начинает вводить много соединительных таблиц.

До сих пор это работало нормально для меня, но мне интересно, есть ли у кого-нибудь идеи о том, как я мог бы улучшить эту структуру. Я долго думал, и для достижения необходимого уровня ассоциации я не могу придумать, как его улучшить. Единственное, что я придумал, - это создать промежуточные классы для каждого объекта, который имеет IList<Page>, но на самом деле он не делает ничего такого, чего HasManyToMany уже не делает, за исключением введения другого класса. Он не расширяет функциональность и, насколько я могу судить, не улучшает производительность.

Есть мысли? Я также обеспокоен ограничениями первичного ключа в этом сценарии. Почти все должны иметь эти свойства, но Страницы не могут быть уникальными для каждого объекта, потому что они будут часто использоваться совместно и объединяться между несколькими объектами.

Все отношения односторонние. (То есть Page не знает, кому он принадлежит). Из-за этого у меня также нет Inverse() сопоставленных HasManyToMany коллекций.

Кроме того, я прочитал аналогичный вопрос: Использование ORM, таких как NHibernate, когда существует много ассоциаций - проблемы производительности

Но это действительно не отвечало моим опасениям.

1 Ответ

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

Вопрос довольно расплывчатый.

Почему вы предполагаете, что отношения «многие ко многим» вызывают у вас проблемы с производительностью?Профилировали ли вы свое приложение?

Вкратце, если Модификация представляет версию или изменение Страницы, она должна быть одна ко многим, а не ко многим.Может быть, у вас их больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...