My favorite new ORM, MindScape's LightSpeed, has released their 2.1 version.  I love this little ORM.  It's fun and friendly to use like Linq 2 SQL, but has a ton of little productivity enhancements that make rapid developers happy.  Some of the things I like about this ORM:

  • Designer Support - Nice little designer much like Linq 2 SQL.  I can go without a designer, and I do quite often with NHibernate, but it's so nice when explaining things to other visual people to just pull up the designer and say "look...right here!".
  • Linq support.  I haven't tested the limits of their support, but it's worked for me so far.
  • You don't have to use the designer.  You can create your classes yourself or use the command line tool.
  • Unlike Linq 2 SQL, it makes an effort to propagate design changes between the model and the database.  I believe this support is always going to be difficult since changes can be radical when refactoring, but for little changes this is nice.
  • It's got nice features such as built in soft delete, and date created and updated time stamping, optimistic locking column.  It handles this stuff for you if you follow their conventions!
  • It's got a wide variety of approaches to ID creation: Guid, Guid.Comb, Keytable, Identity etc....and they are very easy to set and use.
  • Entity validation rules are built into the system, kind of like Castle ActiveRecord.
  • It connects to a wide range of databases, large and small.
  • It's got built in support for Lucene.Net (full text search) and Memcached (caching).
  • It's got single table inheritance and an interesting and easy many to many approach that I really like.
  • I've gotten great responses from the guys at MindScape, I suggested adding Guid.Comb to the product and it was available in the next nightly build.
  • Nightly builds.
  • Did I mention that you can use it for free for very small projects, and otherwise it's incredibly cheap?

There are a couple of things I don't like about LightSpeed, but I can live with these.  Entities derive from their base class.  Of course you can insert your own base class in between, but some purists really hate having to follow that approach.  I've accepted it as a limitation and I tend to take a compositional approach to functionality that needs to be shared between domain objects anyway, so although the snob in me wants to ding them on that, I find that the benefits far outweigh this concern.  In addition, 2.1 allows code creation to be driven from custom templates, so perhaps a clever individual can create alternate patterns.  There isn't currently support for stored procs, but sounds like this is coming soon.  Now with Linq, I tend to use stored procs much less often, but it could be important for backward compatibility and for highly tuned queries.

Version 2.1 includes some nice new features and fixes...but I'll reference rather than repeat.

Technorati Tags: ,,