SubSonic 3, Entity Data Model (Entity Framework) или LINQ to SQL для разработки ASP.NET MVC? - PullRequest
0 голосов
/ 06 сентября 2010

Используя все из них (некоторые больше, чем другие), я все еще не знаю, какой из них лучше всего использовать (с .NET 3.5).Каковы плюсы и минусы каждого при разработке?

SubSonic 3
Недостаточно примеров / документации (я знаю, что это вики, и люди могут обновить его, но это может быть сложночтобы отследить вещи - например, где находятся примеры приложений (WebForms, MVC (текущая версия, а не pre-3), WinForms)).Текстовые шаблоны не работали, как ожидалось, когда я впервые попробовал их.Например, он не очищает имена таблиц, как это делал SubSonic 2 (например, удаление / замена пробелов).Кроме того, вы не можете сказать, какие таблицы включить, только те, которые вы можете исключить (в ActiveRecord.tt).Context.tt и Structs.tt генерируют код для всех таблиц (вы, вероятно, не захотите использовать таблицы aspnet_ и, возможно, некоторые другие (таблицы сеансов)).

Хотя, говоря это (надеюсь, я)я не слишком резок), это довольно хороший ORM для использования, за исключением мелких проблем.

Модель данных Entity (Entity Framework)
Visual Designer для настройки моделей.Синхронизация с базой данных может считаться немного «многословной» и трудной для понимания.Хотя есть довольно приличная документация.Впрочем, углубляться не стоит.

LINQ to SQL Также имеется конструктор для создания моделей.Прост в использовании.Меньше возможностей, чем у двух других.Я также должен был применить исправление для неясной ошибки (не обновлялся, когда модель имела внешние ключи, которые не были типа int)

NHibernate
Посмотрел на этов прошлом, но не так легко настроить по сравнению с выше.Любые примеры приложений ASP.NET MVC, использующие это?

В идеале я хотел бы иметь структуру, которая:

а) могла бы генерировать модели из базы данных
b) поддерживать синтаксис LINQ
c) получить только те данные, которые необходимы (например, для подкачки)
d) разрешить аннотации данных
e) может сгенерировать sql для обновления или создать новые таблицы в существующей базе данных

1 Ответ

1 голос
/ 07 сентября 2010

MVC - уровень представления, ORM - уровень данных

Я не думаю, что ORM имеет что-либо столько общего с приложением MVC. По крайней мере, если вы правильно настроили свое приложение. Модель в приложении MVC - это скорее модель представления уровня представления. Модель представления, посредством которой контроллер и представление взаимодействуют. Не обязательно модель данных. Шаблон проекта MVC немного сбивает с толку, так как разработчики считают, что модель MVC = модель данных. В любом бизнес-приложении, которое не является полностью тривиальным (например, простое приложение с одной сборкой), это не равно. И лучше, если это не так. Особенно, если мы примем в расчет 1002 * разделение интересов . Мы не должны полагаться на определенные классы ORM в любом слое, кроме слоя данных.

Но если вы собираетесь использовать DTO в своем приложении MVC (в качестве моделей представления), я предлагаю вам использовать ORM, который создает частичные классы, так что вы можете легко добавлять к ним дополнительные элементы (например, атрибуты). Ваши аннотации данных могут быть записаны внутри специального класса метаданных, который может быть присоединен к вашему классу модели одним атрибутом уровня класса.

Предложение

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

ORM и генерация классов

С Entity Framework вы получаете очень контролируемую среду для генерации ваших классов из схемы хранилища данных. К сожалению, это не то же самое с другими. Генерация не является олл-ином, но также может управляться и управляться вручную (если вы хотите использовать структуры TPH / TPT).

Аналогично LINQ to SQL. Я не использовал никакой другой ORM, но я думаю, что LinqConnect может иметь свой собственный редактор, похожий на редактор EF Visual Studio, потому что я работал с коннектором MySql от той же компании, и я использовал их конструктор для сущностей, потому что он был лучше чем тот, который предоставляется в Visual Studio 2008.

Но у вас есть инструменты, которые обеспечивают генерацию кода (и вы можете получить шаблоны в Интернете для различных ORM):

  • в Visual Studio встроен T4, который может генерировать код для вас; Вы также можете создавать шаблоны для ORM, написанные на T4, которые затем легко настраивать. Или напишите свою собственную согласно вашим потребностям (в прошлом я писал генератор перечислений из таблиц поиска БД)
  • MyGeneration с открытым исходным кодом, и вы можете найти множество шаблонов для него
  • CodeSmith не бесплатен, но является проверенным продуктом, который я использовал в прошлом с шаблоном .netTiers (до того, как у нас был LINQ), который сэкономил много времени и отлично работал
...