What kind of Object Relational Mapping (ORM) systems would you experience various projects?
What scale may be the project?
What features would you use and search for within an ORM?
SmallMedium Projects: SubSonic.
It is really quick to obtain ready to go by using it, and it has well toned querying included in it.
Enterprise Projects: NHibernate.
It causes it to be much simpler to split up your domain model out of your data model.
Ultimately though I still discover that you will find many occasions where you've still got to bend towards the will from the database, even using NHibernate.
For me the only real true method to totally separate your domain Model out of your database model would be to write your personal DTOS (basically POCOs for passing data around), after which map it well for your ORM of preference inside your data layer.
Just be sure you have a clean divide involving the object model and also the underlying ORM implementation. Be sure that your object model does not know of the ORM layer just in case you have to switch ORM later on and you will go far.
The reply is.... everything is dependent!
I run my very own business and literally starve yourself basically do not get a task shipped promptly... and I have discovered that the option of ORMs may have a significant effect on the amount of a task...
The size from the project (and it is needs) should drive the granularity from the code design, whereas the type of project (wealthy client / web / application server) should influence the selection of ORM.
All the ORMs get their advantages and disadvantages - particularly if you want to rely on them "out-of-the-box". e.g. Linq2Sql (presuming MSSQL after sales) has incomplete support for collection change notices and does not eager load entity associations both in directions, therefore it is not a fantastic choice for WinForms / WPF applications. ...Yet it certainly holds it's own within the stateless realm of ASP.Internet web programs.
Entity Framework does not support lazy loading as they are (some would say this is a positive thing), but offers it's own object query language, which makes it a better option for middle-ware / application server situations. You are able to securely wager on EF being pressed-for-gold-standard, given how heavily Microsoft are trading inside it.
Mindscape's Lightspeed provides a more comprehensive entity model, where associations, collection change notices, lazy loading and entity affixing act as you'd expect these to - which causes it to be an excellent option for desktop programs that require to show reasonably small volumes of interactive "master-detail-more detail" style data. Within the lower-side, they haven't implemented caching or forecasts for LINQ correclty, as well as their entity model makes primary secrets readonly, which makes it an especially undesirable option for web programs and stateless services.
NHibernate, OpenAccess, EntitySpaces and Subsonic all get their benefits and drawbacks too, each different on levels of support for performance, forecasts, LINQ, true-POCOs and [useful] caching.
A word of warning: I am a fan of Ormbattle.internet, try not to take individuals stats because the final word which ORM to choose. Evaluate an ORM on your own and stress test drive it!!!. I forked out my very own money for any Lightspeed license, simply to discover it chokes when materializing > 2000 records inside a simple inner join query. Once the database query takes < 1 second, however the ORM takes > a minute to materialize the organizations, then this is a problem. OrmBattle.Internet shows Lightspeed like a top contender on object materialization - which proves that, when i stated, everything is dependent!