Happy 2nd Year Anniversary
Apr 2, 2020It was 2 years ago when the first version release of RepoDB was placed at Nuget.org.
Story
I started writing the first code last March 15, 2018. The first offical class that has been written is BaseRepository. I developed the initial compiler via IL
and I find it extremely fast. By that time, I am obsessed of beating up Dapper ORM when it comes to performance. I first wrote the following methods (ExecuteQuery, ExecuteNonQuery, ExecuteScalar and ExecuteReader. Then, I added some basic methods like (Insert, Delete, Update and Query). The implementation is very shallow and NOT-tested.
The IL code can be found here, but it is not being used by the library now. We are now using the
Linq-Based
compiler (can be found here).
The next day, I came to office early and check-in the RepoDB code snippets in our internal repository. Few minutes after, I broadcasted an email to all the developers of Orsted A/S at Kuala Lumpur, Malaysia without knowing the effect of it.
I received much criticism from various architects the same day (i.e.: re-inventing the wheel, too much ambitious, etc).
However, I got a good feedback from my direct Team Lead.
Motivations
As a leading developer of the team by that time, we need to deliver a solution that will calculate the power production in a real-time manner. I initially developed the solution by reusing the repository-based implementation of our existing project (using the Dapper ORM). I find it hard to develop a very dynamic repository (like what BaseRepository and DbRepository) can do now. I also encountered a lot of problems when using the Dynamics
and ExpandoObject. I giveup when I need to read a data from View
with a different ColumnName
as the primary key.
TBH, I am also very good in ADO.NET by mastering it since the start of my career 13 years ago (from today). I also have experience building CRM solutions that has a feature called Selection-Wizard
in which it allows the user to pre-select the columns they would like to query from the complex relationships of the CRM, and provide reports on top of it. I know that I am capable of creating an ORM and with great motivation of new things to play with.
I first posted RepoDB in Reddit 2 years ago. The first post is titled RepoDB - a very fast lightweight ORM and has the perfect spices of Micro-ORM. Faster than Dapper! Rooting for the experts about this., and the post can be found here.
A lot of people joined the discussion and the thread has top the r/csharp
in just few minutes. I saw a lot up/down votes and some frustrations from the community. Honestly, I do not know how to deligently answer the questions from the community, could be the reason of the frustrations.
I remember a one comment that brought me to RawDataAccessBencher ORM bencher of FransBouma. He wants me to test the library there. The result was, RepoDB is the second most slowest ORM and I was totally shocked actually. I know that the IL I developed is very fast, but by that time, it is only very fast for extracting million of rows (in single iteration) (mabye the fastest), but is very slow if you bench it with its execution mean-deviation (includes multiple iterations by batch).
I analyzed the culprits in the code snippets and also tried to optimized the IL. I solved the problem and brought RepoDB as the fastest ORM a month after. The official technique was posted by me on my old blog (can be found here).
It was also 2 years ago (4 months after pushing the first version), RepoDB has been officially accepted by FransBouma to be a part of the RawDataAccessBencher ORM bencher. That is amazing and gave me more spirit to futher develop the library.