Ваша модель кажется достаточно простой, чтобы ее поддерживали Linq2Sql, Entity Framework и NHibernate.
Самый большой выбор, который вам нужно сделать, это то, хотите ли вы следовать подходу, основанному на домене, для моделирования программного обеспечения или вы хотите работать с вашими объектами как строками базы данных. Если вы хотите получить фантазию при отображении строк в объекты, NHibernate - лучший выбор. Если вас устраивает 1: 1 между вашими бизнес-объектами и строками базы данных Linq2Sql и Entity Framework, то все в порядке.
NHibernate и в некоторой степени Entity Framework поддерживают объекты POCO, которые не наследуются от базового класса и могут не знать о своих требованиях к постоянству. Linq2Sql может, но это странно и странно.
Что касается масштабирования, то все три из этих инструментов ORM позволят вам продвинуться довольно далеко, однако AFAIK NHibernate имеет больше возможностей, когда речь идет о разделении серверов баз данных и обработке идентификаторов между базами данных, и даже имеется некоторая поддержка Sharding в работе.
NHibernate также поддерживает большинство провайдеров, вы можете перейти от MSSql к MySql в течение часа, с Linq2Sql и EF (хотя поддержка не ожидается), вы не можете)
Итак, TL; DR:
- NHibernate, если вам нужна лучшая поддержка POCO, больше возможностей масштабирования и «есть сопоставление для этих» функций отображения строк-> объектов. FluentNHibernate потрясающий. У вас есть поддержка нескольких провайдеров
- Entity Framework, если вы хотите получить лучшую поддержку графического интерфейса дизайнера и готовы ждать EF4, vs2010 - полнофункционального ORM.
- Linq2Sql, если вам нужен простой доступ к БД.
Я использовал все три, и я менее всего доволен EF1, EF4 лучше, но не так хорош, как NHibernate.
Я использую EF4 с VS 2010 для всех будущих приложений "простого CRUD" и NHibernate, когда мне нужно стать модным.