2010-03-15 5 views
4

HI, В настоящее время у меня есть один большой datacontex с 35 таблицами (я перетащил все мои таблицы DB в конструктор). Я должен признать, что это очень удобно, потому что у меня ORM для моего полного БД, а запрос с linq прост и прост.Linq to SQL - вопрос дизайна

Мои вопросы: 1. Вы считаете, что плохая конструкция имеет один файл данных с 35 таблицами или я должен разделить его на логические единицы? 2. Есть ли какие-либо штрафные санкции за использование такого большого файла данных?

Спасибо, Пини.

+0

Не забудьте указать свой любимый ответ ;-). – Steven

ответ

1
  • Сплит логических устройств
  • Существует не реальные штрафы производительности Тхо это будет своего рода трудно иметь обзор.
+0

Можете ли вы дать вескую причину, по которой нужно разделить? – UshaP

1

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

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

+0

Я сейчас не вижу проблемы с производительностью, потому что продукт находится в разработке, и я единственный пользователь в системе. Но мне интересно, что произойдет, если у меня будет 20 одновременно работающих пользователей. Я знаю, что есть инструменты для тестирования нагрузки, но я хочу услышать мнение других людей. – UshaP

+0

Я бы предположил, что приличное оборудование сможет обрабатывать 20 пользователей/35 таблиц/тысяч (?) Строк в таблице, но на самом деле нет никакого способа ответить определенно на основе приведенной информации. Все, что действительно можно сказать наверняка, состоит в том, что это удар производительности, достаточно ли того, что вам нужно оптимизировать, это то, что вы узнаете только через мониторинг и тестирование нагрузки (хотя моя кишка говорит мне, что до тех пор, пока вы «правильно избавляясь от контекста, делая их недолговечными, имеют приличное оборудование и не имеют каких-либо серьезных недостатков, не упомянутых в вашем сообщении, что с вами все будет в порядке) – heisenberg

1

Я могу понять вашу боль. Дизайнер LINQ to SQL невелик, когда дело доходит до больших моделей. Однако 35 таблиц не очень большие.

Если вы можете разбить таблицы в двух или более группах, где каждая группа полностью не зависит от другой (никаких отношений), в этом случае расщепление оправдано ИМО, особенно когда группы являются логически разделенными частями. В этом случае вы можете дать каждому контексту собственное имя.

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

Также имейте в виду, что разделение модели может иметь некоторые раздражающие побочные эффекты в вашей архитектуре. Конечно, это зависит от вашей архитектуры. Приложение, над которым я работал, использовал «служебные команды», которые выполняли бизнес-логику от имени слоя презентации. Автоматическая конструкция предоставила команды с экземпляром DataContext и имела несколько DataContexts, которые сделали этот проект довольно расстраивающим.