Also, LINQ to DB provides mechanism similar to EF Code First generator. It has T4 template that generates code structure from the database. All you need is to put connection string and execute T4 template.
BLToolkit also supports LINQ, but it's main strength is not only speed but also mapping.
Let's compare it with other ORMs.
These tests were performed on i5-4200H, DDR3-1600, Win 8.1 x64, SQL Server 2014, VS 2013, .NET 4.5, EF 6.1.2, BLTookit 4.2.0, LINQ to DB 126.96.36.199. Default Northwind database was used.
Used tests are the same as in previous article.
There were 6 methods tested to work with database:
- DbContext CodeFirst (LINQ query, models generated from DB)
- DbContext CodeFirst (raw SQL query)
- Business Logic Toolkit (raw SQL query)
- LINQ to DB (LINQ query, models entities generated from DB)
- LINQ to DB (raw SQL query)
EF CodeFirst with LINQ query takes much more time that others. LINQ to DB with LINQ query and CF wih raw SQL take nearly the same time, and take 2-3 times more than other raw SQL. But anyway for complex queries it doesn't matter much.
Simple TOP 10 query
Here and below the grey part of bar is context initialization.
For simple query, LINQ to DB query using LINQ takes twice more time than for raw SQL. But anyway it's much faster than EF, and even slightly faster that CF with raw SQL.
Simple TOP 500 query
When number of result rows is not small, then even for simple query difference is not much. It's because mapping takes significant part of time, and compilation of simple LINQ query is not so much. And we can see that new architecture for linq2db is more faster than BLToolkit. Even LINQ query with linq2db is faster that raw SQL with BLToolkit. LINQ to DB with raw SQL query is the same speed as ASO.NET.
Complex TOP 10 query
LINQ to DB compilation is very fast. This makes its LINQ query speed almost the same as ADO.NET. EF CF with LINQ query takes twice more time than others.
Complex TOP 500 query
Complex TOP 500 query results are the same.
LINQ to DB is very fast both with raw SQL or LINQ query. For simple and small queries it's possible to use raw SQL instead of LINQ, but absolute time makes almost no difference.
LINQ to DB is good choice for ORM if you don't need change-tracking. And if you don't need all BLToolkit mapping capabilities (linq2db supports type-to-type mapping).