Я только что закончил проходить учебное руководство MvcMusicStore, найденное здесь. Это - превосходное учебное руководство с рабочим исходным кодом. Одно из моих любимых учебных руководств MVC v2 до сих пор.
То учебное руководство является моим первым введением в использование Платформы Объекта ADO.NET, и я должен признать, что большая часть из него была действительно быстра и проста. Однако я волнуюсь по поводу пригодности для обслуживания. Насколько настраиваемый эта платформа, когда клиент запрашивает дополнительные функции на их сайт, которые требуют новых полей, таблиц и отношений?
Я являюсь очень соответствующим о неспособности эффективно выполнить заявки на изменение клиента, потому что модели Entity являются в основном перетаскиванием, компьютер сгенерировал код. Мой опыт с генераторами кода не хорош. Что, если что-то выходит из строя в кишках модели и я не могу соединить шалтай-болтая назад?
В конечном счете, интересно, если использование руки ввело модели, которые могут прочитать люди, и редактирование является более эффективным курсом, чем использование Платформы Объекта.
Кто-либо работал достаточно с платформой объекта, чтобы сказать, что они - удобное использование ее в очень жидкой среде разработки?
Я был использую entity framework (V1.0) около года в моем текущем проекте. У нас есть сотни таблиц, все они добавлены в edmx. Проблемы, с которыми мы сталкиваемся (хотя не уверен, решит ли новая структура сущностей эти проблемы)
Когда вы привыкли к VS.net IDE, вы будет использоваться для перетаскивания операции из вашей IDE. В проблема в том, что когда ваши хосты edmx Сотни таблиц, IDE действительно тормозит и вам придется ждать 3-4 минут до того, как он станет отзывчивым
При таком большом количестве таблиц любое редактирование вас делать на edmx долго.
Когда вы собираетесь использовать версию контроль, сравнение 10000 строк XML - это довольно болезненно. Подумайте о слиянии 2 ветви, каждая из которых имеет 10000 строк edmx, таблицы, новая ассоциация между таблицами, удаленные ассоциации и иду туда и обратно, сравнивая xmls. Вам понадобится хороший xml инструмент сравнения, если вы серьезно о слиянии 2-х больших файлов edmx
По соображениям производительности нам пришлось сделайте csdl, msl и ssdl как встроенные ресурсы
Ваш edmx должен быть синхронизирован с вашей БД все время или в по крайней мере, когда вы пытаетесь обновить edmx, он попытается синхронизироваться и может выдают какие-то непонятные ошибки, если они не синхронизированы.
Имейте в виду, что ваш сущности (таблицы / представления) всегда должны иметь первичный ключ, иначе вы будете получить непонятные ошибки. См. Мой другой вопрос здесь
Что мы сделали / я мог бы рассмотреть в будущем при использовании EF
Используйте несколько edmx, используя 1 edmx для таблиц, логически сгруппированных / связанных вместе.Помните о том, что если вы сделаете это, каждый edmx должен жить в собственном пространстве имен. если ты попробуйте добавить 2 связанные таблицы (скажем, лицо и адрес) на 2 edmx в то же пространство имен, вы получите ошибка компилятора, указывающая, что отношения по внешнему ключу уже есть определенный. (Совет: создайте папку и создайте edmx в этой папке. Если вы попытаетесь изменить пространство имен в edmx без папки, он не сохраняет должным образом пространство имен в следующий раз, когда вы открыть / отредактировать)
меньше таблиц в edmx => менее тяжелые
контейнер => хорошо
меньше таблиц в edmx => проще объединить при объединении 2-х веток
Имейте в виду, что объект контекст не является потокобезопасным
Ваш репозиторий (или любой другой DAO, который вы используете) должен нести ответственность за создание и удаление контейнера, который он создает. Использование фреймворков DI, особенно в веб-приложениях, усложняет нам задачу. Веб-запросы обслуживаются из пула потоков, и контейнер не был должным образом удален после обслуживания веб-запроса, поскольку сам поток не был удален. Контейнер использовался повторно (при повторном использовании потока) и создавал множество проблем с параллелизмом
Не доверяйте своей VS IDE. Получить хороший XML-редактор и знаете, как редактировать edmx файл (хотя вам и не нужно редактировать конструктор). Пачкайте руки
ВСЕГДА ВСЕГДА ВСЕГДА (просто не могу этого подчеркнуть) запустите Профилировщик SQL (я имею в виду каждый и каждый шаг вашего кода), когда вы выполнять ваши запросы.Такой же сложный, как запрос может выглядеть, вы будете удивлен, узнав, сколько раз ты ударил пример БД: (извините, не могу получить код в нужном формате, может кто-нибудь его форматирует?)
var myOrders = from t в context.Table, где t.CustomerID = 123
выберите t; // запрос выше еще не выполнено
if (myOrders.Count> 0) // запрос БД к
find count {
var firstOrder = myOrders.First () // запрос к БД для получения
первый результат
}
Лучший подход
// запрос материализован, всего 1 обращение к БД, поскольку мы используем ToList () var myOrders = (от t в Context.tables где t.customerID = 123 выберите t) .ToList ();
if (myOrders.Count> 0) // нет попадания в БД
{
//сделай что-нибудь
var myOrder = myOrders [0]; // нет попадания в БД
}
Знайте, когда использовать отслеживание и не отслеживание (только для чтения) и веб-приложения больше читает, чем пишет. Установленный их правильно, когда вы инициализируете ваш контейнер
Я забыл скомпилированные запросы? Смотреть здесь , чтобы получить больше вкусностей
При получении тысяч строк назад из вашей БД, убедитесь, что вы используете IQueryable и отсоедините objectContext , чтобы вы не заканчивается память
Обновление:
Джули Лерман решает ту же проблему с помощью аналогичного решения . Ее сообщение также указывает на работу Уорда по работе с огромным количеством таблиц
Вы знаете, мне было бы интересно, если бы кто-нибудь из разработчиков мог дать некоторое представление об этом. Любые примеры Entity Framework, кажется, состоят только из десяти-двадцати таблиц, что является небольшим масштабом.
А как насчет использования EF на базе данных с сотнями или даже тысячами таблиц?
Лично я знаю несколько разработчиков и организаций, которые обожглись на LINQ-to-SQL и воздерживаются в течение года или около того, чтобы посмотреть, какое направление примет EF.
Я не слишком знаком с Entity Framework, но считаю, что он просто генерирует файл EDM, который можно редактировать вручную. Я знаю, что довольно часто делал это с файлами DBML Linq-to-SQL, которые создает дизайнер (часто быстрее редактировать их вручную, чем использовать конструктор для небольших настроек).
Начиная с Entity Framework 4 (с Visual Studio 2010), сгенерированный код выводится из файлов T4 (Text Template Transformation Toolkit), которые вы можете редактировать, чтобы иметь полный контроль над тем, что создается. См. блог Олега Сича , который является кладезем информации о T4. Генерация кода - не проблема, и T4 открывает столько перспектив, без которых я больше не могу жить.
В настоящее время я работаю над проектом, в котором мы используем Entity Framework 4 для уровня доступа к данным и Scrum в качестве гибкого метода управления проектами. От одного спринта к другому добавляется несколько таблиц, другие изменяются, добавляются новые требования. Когда вы один раз столкнулись с каждой потенциальной проблемой EF (например, если вы знаете, что значения по умолчанию из базы данных не сохраняются по умолчанию в EDMX-файле, или измените столбец, допускающий значение NULL, на столбец, не допускающий значения NULL, и обновление конструктора не изменит сопоставленное свойство состояние), все готово.
Изменить: , чтобы ответить на ваш вопрос, это EF 4, генерация кода которого основана на T4, а не на T4, поддерживающем EF. В EF 3.5 (или EF 1.0, если хотите) теоретически можно использовать T4, написав их с нуля, проанализировав файл EDMX в коде T4 и сгенерировав свои сущности. Было бы довольно много работы, учитывая, что все это уже сделано EF 4. Плюс, Entity Framework 3.5 поддерживает только один тип объекта, тогда как EF 4 как встроенные или загружаемые шаблоны для объектов POCO (которые ничего не знают о настойчивости), Self-Tracking Entities ...
Учитывая саму Entity Framework, я думаю, что в ее первом выпуске не хватало многих функций, и, хотя ее можно было использовать, было довольно неприятно использовать. EF4 намного лучше. В нем по-прежнему отсутствуют некоторые базовые функции (например, поддержка перечисления), но теперь он стал моим предпочтительным уровнем доступа к данным.