Выбор базы данных (и ORM) для приложений .NET малого и среднего размера - PullRequest
3 голосов
/ 03 ноября 2008

У меня есть требование разработать приложение на основе .NET, требования к данным которого, вероятно, превысят лимит в 4 гигабайта SQL 2005 Express Edition.

Могут быть другие пользователи того же приложения (в будущем) с требованием использовать определенную платформу БД (например, Oracle или SQL Server) из-за собственного опыта работы с БД.

Вопросы * * 1005 Какую РСУБД вы бы порекомендовали? Судя по всему, основными вариантами выбора являются PostGreSQL, MySQL или FireBird. У меня есть только опыт MYSQL из них. Какой инструмент ORM (если есть) вы бы порекомендовали использовать - в идеале, который можно поменять местами между платформами БД с минимальными усилиями? Мне нравится внешний вид структуры сущностей, но я не уверен, насколько поддерживаются платформы, отличные от SQL Server. Если это поможет, мы будем использовать версию 3.5 Framework. Я открыт для идеи использования такого инструмента, как NHibernate. С другой стороны, если это будет проще, я с удовольствием напишу свои собственные хранимые процедуры / код DAL - не будет так много таблиц (возможно, 30-35).

Ответы [ 6 ]

5 голосов
/ 03 ноября 2008

Я предлагаю использовать NHibernate с postgres.

Вы можете выполнять все свои тесты и разработки на sqlite, поэтому вам не нужно запускать экземпляр postgres на вашем компьютере разработчика.

Если вы не уверены, хотите ли вы использовать mysql или postgres, я советую попробовать их оба. Postgres более совместим, но если вам нравится MySQL (и вы используете ORM), вам, вероятно, следует это использовать.

2 голосов
/ 03 ноября 2008

Я использовал MyGenerationSoftware с NHibernate для автоматической генерации спецификаций Classes / OR для базы данных mySQL. Приятной особенностью MyGenerationSoftware является то, что он может просматривать вашу базу данных и создавать ваши классы из этого.

MySQL - это (на мой взгляд) база данных производственного качества, и множество коммерческих сайтов используют mySQL, включая Slashdot .

Для NHibernate, как только вы его настроите, вы можете легко отредактировать XML, чтобы он указывал на другую базу данных, и это все, что нужно для переключения баз данных.

2 голосов
/ 03 ноября 2008

В последнее время я оценил множество возможных решений ORM для .NET. Если бы я был вами, я бы не пошел по пути Entity Framework при использовании чего-либо, кроме MS SQL - кроме проблем с концептуальной моделью сущностей (это должно быть общим, но нет способа поймать что-то вроде последовательности с этой моделью) вы сильно зависите от сторонних разработчиков драйверов драйверов баз данных - для меня определенно много переменных в этом уравнении.

С другой стороны, NHibernate позволяет быть как общим в коде, так и специфичным для выбранного диалекта БД. НАПРИМЕР. Вы можете использовать такой атрибут для свойства Id:

[Generator( Class = "native")]
//...
public virtual int CustomerId {get; set; }

Просмотр опции «Собственный» генератор в SQL Server NH предполагает, что это поле идентификации (автоинкремент), а для Oracle предполагается, что это свойство использует последовательность с тем же именем (вы можете изменить имя последовательности, если хотите).

Кроме того, всего несколько дней назад MS полностью отказалась от LINQ to SQL начального уровня ORM. Вы никогда не можете быть уверены, что они не будут делать то же самое с Entity Framework. Нет такой проблемы с открытым исходным кодом NHibernate.

Я не могу предложить какую-либо БД, не зная ваших конкретных потребностей, но если вы хотите использовать бесплатное программное обеспечение (за исключением Oracle) и у вас еще нет опыта работы с MySql, вам следует попробовать Postgres, который является более мощным, чем MySql.

В любом случае, с NHibernate вы можете переключать БД позже без особых проблем.

Вот список диалектов базы данных, поддерживаемых NHibernate: http://www.hibernate.org/361.html

РЕДАКТИРОВАТЬ: Заметив, что вы уже знаете MySQL - так как вы все равно не собираетесь использовать DB напрямую с NHibernate, я думаю, что вы должны сначала начать с MySql и сосредоточиться на части ORM - вам будет легче контролировать что именно NHibernate делает с БД.

Но вы должны знать, что NHibernate позволяет вам сначала написать свои классы данных и автоматически сгенерировать схему БД - если вы пойдете по этому пути (что неплохо с точки зрения DDD), слой БД действительно станет прозрачным для вас.

1 голос
/ 21 июня 2009

Почему не Firebird? Firebird имеет больше возможностей, чем другие бесплатные базы данных. И его поддерживают NHibernate и Entity Framework. И Firebird может быть встроен в ваше приложение, и модель лицензирования менее ограничена, чем у MySQL.

Это только мое скромное мнение.

0 голосов
/ 26 июня 2009

EntityORM - http://entityorm.uuuq.com соответствует вашим потребностям, а не только.

0 голосов
/ 03 ноября 2008

Llbgen очень хорош для вашего картографа ORM. Сначала есть немного кривой обучения, но как только вы это освоите, это очень хорошо. Он поддерживает базы данных, которые вы упомянули здесь, а также несколько других.

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