C# – NHibernate or LINQ to SQL

.netc++linqlinq-to-sqlnhibernate

If starting a new project what would you use for your ORM NHibernate or LINQ and why. What are the pros and cons of each.

edit: LINQ to SQL not just LINQ (thanks @Jon Limjap)

Best Solution

I have asked myself a very similar question except that instead of NHibernate I was thinking about WilsonORM which I have consider pretty nice.

It seems to me that there are many important differences.

LINQ:

  • is not a complete ORM tool (you can get there with some additional libraries like the latest Entity framework - I personally consider the architecture of this latest technology from MS to be about 10 years old when compared with other ORM frameworks)
  • is primarily querying "language" supporting intellisense (compiler will check the syntax of your query)
  • is primarily used with Microsoft SQL Server
  • is closed source

NHibernate:

  • is ORM tool
  • has pretty limited querying language without intellisense
  • can be used with almost any DBMS for which you have a DB provider
  • is open source

It really depends. If you develop a Rich (Windows) desktop application where you need to construct objects, work with them and at the end persist their changes, then I would recommend ORM framework like NHibernate.

If you develop a Web application that usually just query data and only occasionally writes some data back to the DB then I would recommend good querying language like Linq.

So as always, it depends. :-)