Быстрая ОРМ для Безболезненного ASP.NET Прототипирование MVC на SQL Server

#c# #sql-server #asp.net-mvc #orm

#c# #sql-сервер #asp.net-mvc #orm

Вопрос:

Какой хороший ORM можно использовать для быстрого прототипирования без ущерба?

Я с большим успехом использовал LINQ-to-SQL, но в конечном итоге я всегда создаю вокруг него целый слой репозитория (и все, что с этим связано), поэтому мне не нужно вставлять «Insert / Update» и логику сопоставления в мои контроллеры. Если я хочу добавить столбец, мне нужно написать миграции и обновить интерфейсы и репозитории.

Я бы хотел что-то, что просто работает. db4o — хороший кандидат, но у меня всегда были проблемы с отсутствием надлежащей подкачки данных и скудной поддержкой первичного ключа. Итак, давайте сузим круг поисков до решения на основе SQL, которое работает с SQL Server.

Какой ORM может создать реляционную базу данных SQL с наименьшим объемом конфигурации или кода?

Комментарии:

1. Как правило, я обнаружил, что большая конфигурация = больший контроль над структурой создаваемой базы данных. Использование автоматической настройки может подойти для того, что вам нужно, но я обнаружил, что в конечном итоге я всегда пишу конфигурацию, поскольку хочу управлять структурой.

2. если вы действительно решили использовать «только SQL Server» — тогда выбирайте L2S. Меньше уровней абстракции = меньше общей сложности. Если вы склонны «строить правильно» — используйте EF CodeFirst или NHibernate (с плавной конфигурацией NHibernate и разговорчивостью).

3. Не уверен, почему это было сделано сообществом-wiki’ed. Это реальная проблема, с которой я столкнулся, и ответы дали мне отличное направление для моих требований (сначала код Entity Framework). Спасибо, ребята.

4. Обновление: код EF4 Сначала не может обновить схему. Свободное владение NHibernate с шаблоном unit-of-work и репозитория работает отлично.

Ответ №1:

Entity Framework довольно хорош, и с последней версией вы получаете несколько приятных функций, таких как Code First и POCO entities.

Комментарии:

1. Я не знал, что новая Entity Framework поддерживает это. Прямая ссылка на хороший пример / учебное пособие была бы приятной. Я нашел пост Скоттгу полезным.

2. ADO.net в team blog есть несколько хороших материалов. Entity Framework 4.1 на самом деле действительно приятен и прост в использовании, если у вас уже создана база данных.

3. Согласно примечаниям к выпуску EF 4.1, «Миграция схемы базы данных в этом release…it необходимо удалить и воссоздать базу данных при изменении модели.» Удаление всех таблиц только для добавления столбца нелепо.

4. Вы можете настроить свою схему вручную и использовать L2E для подключения ее к вашей программе.

5. Свободное использование NHibernate одержало победу над более чистыми объектами (без DbSet<…>) и SchemaUpdate.

Ответ №2:

Я бы посмотрел на Fluent NHibernate, поскольку он действительно быстр в освоении и имеет удобную конфигурацию.

Комментарии:

1. Это выглядит действительно многообещающе. Я всегда уклонялся от NHibernate из-за XML-отображения спагетти.

2. Если вы придерживаетесь соглашений по умолчанию, которые вполне разумны, вы можете автоматически сопоставлять, что делает это действительно быстрым. Как и вы, я никогда не был впечатлен всей конфигурацией XML, необходимой для NHibernate.

3. Свободное владение NHibernate изменило способ моей работы. Это намного лучше, чем писать методы repo для LINQ-to-SQL. Все, кто использует ASP.NET MVC следует использовать это просто для сохранения реляционных данных. Однако у меня есть несколько соглашений о сопоставлении, которые помогают мне оставаться в здравом уме, в том числе Not. Обнуляемый() по умолчанию и инфлектор для множественных имен таблиц.

Ответ №3:

Entity Framework / Linq2SQL выходят на рынок в кратчайшие сроки. NHibernate немного сложнее.

Я бы все равно выбрал NHibernate. Когда все усложняется, это становится сложнее и медленнее, если в этом есть какой-то смысл.

Комментарии:

1. Я склонен хотеть «создать это правильно с первого раза», но время является критическим фактором для поддержания мотивации для побочных проектов. NHibernate всегда отличался слишком большой конфигурацией. Однако свободный NHibernate выглядит неплохо.

2. @FreshCode, FluentNHibernate — это не что иное, как удобный способ сопоставления ваших объектов. Это никоим образом не упрощает управление сеансами или настройку запуска. Но если вы сделаете эти две вещи «правильным способом» один раз — вы легко создадите прототип всего, что захотите.

3. В NH очень мало настроек. Вы можете сделать это в коде тривиально, менее чем в 15 строках, чтобы настроить свою фабрику сеансов.