Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lightweight alternatives to NHibernate

NHibernate is not really a good fit for our environment due to all the dependencies. (Castle, log4net etc.)

Is there a good lightweight alternative?

Support for simple file based databases such as Access/SQLite/VistaDB is essential.

Ideally, something contained in a single assembly that only references .NET assemblies. If it only requires .NET framework 2.0 or 3.0 that is a bonus.

like image 770
Andreas Avatar asked Sep 18 '08 06:09

Andreas


4 Answers

Massive - https://github.com/robconery/massive

or

PetaPoco - https://github.com/toptensoftware/petapoco

Both are a single .cs file with no dependencies except what's in the GAC.

(full disclosure, PetaPoco is something I wrote)

like image 156
Brad Robinson Avatar answered Oct 05 '22 17:10

Brad Robinson


For a lightweight ORM that performs well and only requires a single assembly why not try out Lightspeed from Mindscape. It's not open-source, however source is available and it's reasonably priced - the risk with most ORM's that aren't well adopted is of course quality and level of support, and there are very few other open source ORM's worth bothering with in the .Net space at the moment.

Because of your dislike of NHibernate's dependencies it sounds like you don't have a need for a logging framework or any of the castle project facets i.e. IoC, Monorail etc. Have you considered maybe just taking the bare minimum of NHibernate requirements (log4net and the Iesi collections I believe, and dynamic proxy from the castle project?) and running ILMerge over them to consolidate them into a single assembly - might take a bit of fiddling, but it's not too hard - or alternatively you could just pull the source code for each of these projects into a custom build of NHibernate you maintain for your organization that trims out the features not required by your project/organization - it's not as hard/akward as it sounds and I've done something along these lines for one project where we wanted to benefit of an ORM, but needed to reduce the size of the distributed files/installer.

Also - are you perhaps able to explain what you feel is too "heavy" about an Nhibernate based solution ... in my experience its a reasonably lightweight ORM framework compared to some.

like image 24
Bittercoder Avatar answered Oct 05 '22 18:10

Bittercoder


Adding to this list, you could also have a look at Dapper (written for and used by StackOverflow itself).

like image 31
Richard Banks Avatar answered Oct 05 '22 17:10

Richard Banks


Generally speaking, for your database backend to work with .net you need an ADO.Net provider for it.

For MS Access (Jet), the Provider is shipped with .net. For SQLite, there is a selfcontained ADO.Net Provider.

As for the data access layer lib, if you want some abstraction over ADO.Net:

  • MS Data Access Application Block, a part of ms enterprise library.
  • iBatis.Net (Was retired by the Apache Foundation in 2010) MyBatis.net
  • ADOTemplate from the Spring Framework.net

All those work well starting with framework 2.0 and up.

Basically, you choose (and there is a lot of choices)

like image 24
RHeitzmann Avatar answered Oct 05 '22 17:10

RHeitzmann