Entity Framework 4.1 для большого количества таблиц (715) - PullRequest
11 голосов
/ 31 мая 2011

Я разрабатываю слой доступа к данным для базы данных с более чем 700 таблицами.Я создал модель, включающую все таблицы, которые создали огромную модель.Затем я изменил модель, чтобы использовать DBContext с 4.1, который, казалось, улучшил то, как он компилировался и работал.Конструктор, похоже, не работал вообще.

Затем я создал тестовое приложение, которое просто добавило две таблицы в таблицу, но процессор перешел на 100% в методе db.SaveChanges.Будучи черным ящиком, было трудно определить, что пошло не так.

Так что мои вопросы

  1. Является ли структура сущностей лучшим подходом к большой базе данных
  2. Если это так, следует ли разбить модель на логические области.Я заметил, что вы не можете иметь одну и ту же таблицу sql в нескольких моделях
  3. Я читал, что подход с использованием только кода лучше всего подходит в этих больших случаях.Что это такое?

Любое руководство будет по-настоящему оценено

Спасибо

Ответы [ 2 ]

12 голосов
/ 31 мая 2011

Большая база данных - это всегда нечто особенное. Любая технология имеет свои плюсы и минусы при работе с большой базой данных.

Проблема, с которой вы столкнулись, наиболее вероятно связана с построением модели. Когда вы запускаете приложение и используете материал, связанный с EF, в первый раз, EF должен построить описание модели и скомпилировать его - это самая трудоемкая операция, которую вы можете найти в EF. Сложность этой операции возрастает с увеличением количества объектов в модели. После того как модель скомпилирована, она используется повторно в течение всего времени жизни приложения (если вы перезапустите приложение или выгрузите домен приложения, модель должна быть скомпилирована заново). Вы можете избежать этого, предварительно скомпилировав модель. Это делается во время разработки, когда вы используете какой-то инструмент для генерации кода из модели и включаете этот код в свой проект (это нужно делать снова после каждого изменения в модели). Для моделей на основе EDMX вы можете использовать EdmGen.exe для создания представлений, а для моделей на основе кода вы можете использовать EF Power Tools CTP1 .

EDMX (конструктор) был улучшен в VS 2010 с пакетом обновления 1 (SP1) для работы с большими моделями, но я все еще думаю, что в этом случае большое значение составляет около 100 сущностей / таблиц. В то же время вам редко нужно 715 таблиц в одной модели. Я считаю, что эти 715 таблиц действительно моделируют несколько доменов, поэтому вы можете разделить их на несколько моделей.

То же самое верно, когда вы сначала используете DbContext и код. Если вы моделируете класс, думаете ли вы, что это правильный дизайн, когда класс предоставляет 715 свойств? Я так не думаю, но именно так выглядит ваш производный DbContext - у него есть открытое свойство для каждого выставленного набора сущностей (в простейшем отображении это означает одно свойство на таблицу).

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

Только код = сначала код = основа сущности, когда вы определяете отображение в коде без использования EDMX.

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