В последнее время я оценил множество возможных решений 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), слой БД действительно станет прозрачным для вас.