3 ms·
Even the bulkiest ORMs allow you to use raw SQL. That's why you can use 80 - 90% of the features on the regular basis and hand-tweak regions which cause perform
by Hakeashar 12y ago
Even the bulkiest ORMs allow you to use raw SQL. That's why you can use 80 - 90% of the features on the regular basis and hand-tweak regions which cause performance problems or places where you just have to write SQL (e.g. recursive queries).
In EF, there's either:
Database.SqlQuery<T> - http://msdn.microsoft.com/en-us/library/gg696545%28v=vs.113%29.aspx http://msdn.microsoft.com/en-us/library/gg696545%28v=vs.113%...
which can return any object or:
DbSet<T>.SqlQuery - http://msdn.microsoft.com/en-us/library/gg696332%28v=vs.113%29.aspx http://msdn.microsoft.com/en-us/library/gg696332%28v=vs.113%...
which returns tracked entities, so you can write raw SQL (e.g. call a stored procedure) and just use the 'mapper' part of the framework.
NHibernate has CreateSQLQuery - http://www.nhforge.org/doc/nh/en/#querysql-creating http://www.nhforge.org/doc/nh/en/#querysql-creating
I like micro-ORMs, but when you want to skip writing tedious INSERT or UPDATE queries, you have to add extensions to them (at least to Dapper); that, and SQL strings do not really lend well to refactoring and type safety...
- JohnBooty 12y agoOh man, that's great to know. Thank you for that reply!
- Hakeashar 12y agoNo problem! Happy to help :) ORMs get a lot of flak and while some of it is truly earned, the rest comes from the misuse/abuse of the tool. I always thought that using ORM functionality (where convenient) together with SQL (where necessary or convenient for different facet of the application) was the best from both worlds. And then you can of course mix different ORMs in one project, so you can use EF in areas where performance does not really matter that much or if you're doing a lot of CRUD and Dapper (or something like Insight.Database if you like stored procedure-to-interface mapping) in hot paths or analytic-heavy piece.