This is Part 2 of a 3-part series. Last time we took a look at Dapper. This time we’ll see what Massive has to offer.
Massive
Website: http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive
Code: https://github.com/robconery/massive
NuGet: http://www.nuget.org/packages/Massive
Databases supported: SQL Server, Oracle, PostgreSQL, SQLite
Size: 673 lines of code
Description
Massive was created by Rob Conery. It relies heavily on the dynamic features of C# 4 and makes extensive use of the ExpandoObject. It has no dependencies besides what’s in the GAC.
Installation
Unlike Dapper and PetaPoco, Massive does not show up in a normal NuGet search. You’ll have to go to the Package Manager Console and type “Install-Package Massive -Version 1.1” to install it. If your solution has multiple projects, make sure you select the correct default project first.
If your project is a console application, you’ll need to add a reference to System.Configuration.
Usage
Despite its name, Massive is tiny. Weighing in at under 700 lines of code, it is the smallest micro-ORM I tested. Because it uses dynamics and creates a connection itself, you can get up and running with very little code indeed:
class Products : DynamicModel { public Products() : base("northwind", primaryKeyField: "ProductID") { } } class Program { private static void Main(string[] args) { var tbl = new Products(); var products = tbl.All(); } }
It’s great not having to worry about setting up POCO properties by hand, and depending on your application, this could save you some work when your database schema changes.
However, the fact that this tool relies on System.Dynamic is also its biggest weakness. You can’t use Visual Studio’s Intellisense to discover properties on returned results, and if you mistype the name of a property, you won’t know it until runtime. Like most things in life, there are tradeoffs. If you’re terrified of “scary hippy code”, then this could be a problem.
First Impressions
Massive is very compact and extremely flexible as a result of the design choice to use dynamics. If you’re willing to code without the Intellisense safety net and can live without static typing, it’s a great way to keep your data mapping simple.