Является платформа Объекта ADO.NET (с ASP.NET MVC v2) жизнеспособным вариантом при записи пользовательских и постоянно обновляемых веб-сайтов?

Я только что закончил проходить учебное руководство MvcMusicStore, найденное здесь. Это - превосходное учебное руководство с рабочим исходным кодом. Одно из моих любимых учебных руководств MVC v2 до сих пор.

То учебное руководство является моим первым введением в использование Платформы Объекта ADO.NET, и я должен признать, что большая часть из него была действительно быстра и проста. Однако я волнуюсь по поводу пригодности для обслуживания. Насколько настраиваемый эта платформа, когда клиент запрашивает дополнительные функции на их сайт, которые требуют новых полей, таблиц и отношений?

Я являюсь очень соответствующим о неспособности эффективно выполнить заявки на изменение клиента, потому что модели Entity являются в основном перетаскиванием, компьютер сгенерировал код. Мой опыт с генераторами кода не хорош. Что, если что-то выходит из строя в кишках модели и я не могу соединить шалтай-болтая назад?

В конечном счете, интересно, если использование руки ввело модели, которые могут прочитать люди, и редактирование является более эффективным курсом, чем использование Платформы Объекта.

Кто-либо работал достаточно с платформой объекта, чтобы сказать, что они - удобное использование ее в очень жидкой среде разработки?

6
задан quakkels 24 June 2010 в 18:02
поделиться

4 ответа

Я был использую entity framework (V1.0) около года в моем текущем проекте. У нас есть сотни таблиц, все они добавлены в edmx. Проблемы, с которыми мы сталкиваемся (хотя не уверен, решит ли новая структура сущностей эти проблемы)

  1. Когда вы привыкли к VS.net IDE, вы будет использоваться для перетаскивания операции из вашей IDE. В проблема в том, что когда ваши хосты edmx Сотни таблиц, IDE действительно тормозит и вам придется ждать 3-4 минут до того, как он станет отзывчивым

  2. При таком большом количестве таблиц любое редактирование вас делать на edmx долго.

  3. Когда вы собираетесь использовать версию контроль, сравнение 10000 строк XML - это довольно болезненно. Подумайте о слиянии 2 ветви, каждая из которых имеет 10000 строк edmx, таблицы, новая ассоциация между таблицами, удаленные ассоциации и иду туда и обратно, сравнивая xmls. Вам понадобится хороший xml инструмент сравнения, если вы серьезно о слиянии 2-х больших файлов edmx

  4. По соображениям производительности нам пришлось сделайте csdl, msl и ssdl как встроенные ресурсы

  5. Ваш edmx должен быть синхронизирован с вашей БД все время или в по крайней мере, когда вы пытаетесь обновить edmx, он попытается синхронизироваться и может выдают какие-то непонятные ошибки, если они не синхронизированы.

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

Что мы сделали / я мог бы рассмотреть в будущем при использовании EF

  1. Используйте несколько edmx, используя 1 edmx для таблиц, логически сгруппированных / связанных вместе.Помните о том, что если вы сделаете это, каждый edmx должен жить в собственном пространстве имен. если ты попробуйте добавить 2 связанные таблицы (скажем, лицо и адрес) на 2 edmx в то же пространство имен, вы получите ошибка компилятора, указывающая, что отношения по внешнему ключу уже есть определенный. (Совет: создайте папку и создайте edmx в этой папке. Если вы попытаетесь изменить пространство имен в edmx без папки, он не сохраняет должным образом пространство имен в следующий раз, когда вы открыть / отредактировать)

     меньше таблиц в edmx => менее тяжелые
    контейнер => хорошо
    

    меньше таблиц в edmx => проще объединить при объединении 2-х веток

  2. Имейте в виду, что объект контекст не является потокобезопасным

  3. Ваш репозиторий (или любой другой DAO, который вы используете) должен нести ответственность за создание и удаление контейнера, который он создает. Использование фреймворков DI, особенно в веб-приложениях, усложняет нам задачу. Веб-запросы обслуживаются из пула потоков, и контейнер не был должным образом удален после обслуживания веб-запроса, поскольку сам поток не был удален. Контейнер использовался повторно (при повторном использовании потока) и создавал множество проблем с параллелизмом

  4. Не доверяйте своей VS IDE. Получить хороший XML-редактор и знаете, как редактировать edmx файл (хотя вам и не нужно редактировать конструктор). Пачкайте руки

  5. ВСЕГДА ВСЕГДА ВСЕГДА (просто не могу этого подчеркнуть) запустите Профилировщик 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]; // нет попадания в БД
    }
    
  6. Знайте, когда использовать отслеживание и не отслеживание (только для чтения) и веб-приложения больше читает, чем пишет. Установленный их правильно, когда вы инициализируете ваш контейнер

  7. Я забыл скомпилированные запросы? Смотреть здесь , чтобы получить больше вкусностей

  8. При получении тысяч строк назад из вашей БД, убедитесь, что вы используете IQueryable и отсоедините objectContext , чтобы вы не заканчивается память

Обновление:

Джули Лерман решает ту же проблему с помощью аналогичного решения . Ее сообщение также указывает на работу Уорда по работе с огромным количеством таблиц

7
ответ дан 10 December 2019 в 00:32
поделиться

Вы знаете, мне было бы интересно, если бы кто-нибудь из разработчиков мог дать некоторое представление об этом. Любые примеры Entity Framework, кажется, состоят только из десяти-двадцати таблиц, что является небольшим масштабом.

А как насчет использования EF на базе данных с сотнями или даже тысячами таблиц?

Лично я знаю несколько разработчиков и организаций, которые обожглись на LINQ-to-SQL и воздерживаются в течение года или около того, чтобы посмотреть, какое направление примет EF.

1
ответ дан 10 December 2019 в 00:32
поделиться

Я не слишком знаком с Entity Framework, но считаю, что он просто генерирует файл EDM, который можно редактировать вручную. Я знаю, что довольно часто делал это с файлами DBML Linq-to-SQL, которые создает дизайнер (часто быстрее редактировать их вручную, чем использовать конструктор для небольших настроек).

1
ответ дан 10 December 2019 в 00:32
поделиться

Начиная с 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 намного лучше. В нем по-прежнему отсутствуют некоторые базовые функции (например, поддержка перечисления), но теперь он стал моим предпочтительным уровнем доступа к данным.

1
ответ дан 10 December 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: