Your model seems simple enough to be supported by Linq2Sql, Entity Framework, and NHibernate.
The biggest choice you need to make is whether you want to follow the Driven Design-driven approach to modeling software or you want to work with your objects as database rows. If you want a fantasy when matching strings with objects, then NHibernate is the best choice. If your happy with a 1: 1 between your business objects and the rows of the Linq2Sql database and Entity Framework is just fine.
NHibernate and, to some extent, the Entity Framework supports POCO objects that are not inherited from the base class and may not be aware of their security requirements. Linq2Sql can, but its hacky and weird.
In terms of scaling, all three of these ORM tools take you pretty far. AFAIK NHibernate has more features when it comes to partitioning database servers and handling cross-domain database identifiers, and there is even some Sharding support.
NHibernate also supports most providers, you can switch from MSSql to MySql in an hour using Linq2Sql and EF (although support is not expected)
So TL; DR:
- NHibernate, if you need better POCO support, more scalability and “there is a mapping for these functions to display row-> objects. FluentNHibernate is awesome. You have support for multiple providers.
- Entity Framework, if you want to improve developer GUI support and are ready to wait for EF4, vs2010 for a full-featured ORM.
- Linq2Sql if you need easy db access.
I used all three and I least like EF1, EF4 is better, but not as good as NHibernate.
I use EF4 with VS 2010 for all future “simple CRUD” applications and NHibernate when I need to get some fantasy.
source share