A small, happy, dynamic MicroORM for .NET that will love you forever.
A small, happy, dynamic MicroORM for .NET that will love you forever.
Massive was started by Rob Conery and has been transfered to Frans Bouma on March 4th, 2015. It's a small MicroORM based on the Expando or dynamic type and allows you to work with your database with almost no effort. The design is based on the idea that the code provided to you in this repository is a start: you get up and running in no-time and from there edit and alter it as you see fit.
Massive is currently on v2.0. To obtain the old v1.0 code, please select the v1.0 branch in the GitHub menu or click here.
To use Massive in your project simply download the following files from the repository's src folder:
Due to its design, all files share the same namespace. If you need to use more than one database in your project, you have to change the namespace of the files and use per database a version of the Massive.Shared.* files.
Massive has no external direct dependencies, just get the code, compile it with your project and enjoy. It does have an indirect dependency, namely on the ADO.NET provider of the database used. The ADO.NET provider is obtained through .NET's DbProviderFactory system. This requires that the ADO.NET provider has been setup properly so .NET can find the factory needed. The following ADO.NET providers are supported out of the box.
Oracle.DataAccess.Client. If you want to use the Managed provider, please change the value in property DbProviderFactoryName in the Massive.Oracle.cs file around line 297 to Oracle.ManagedDataAccess.Client. This requires .NET 4.0 or higher.MySql.Data.MySqlClient) and with the Devart dotConnect for MySQL driver (Devart.Data.MySql). Be aware of licensing issues. At the time of writing the free version of the Oracle/MySQL driver must not be used in closed source development, though it can be used in many open source contexts. However the free version of the Devart driver can be used in closed source development subject to some restrictions. If you want to use the Devart driver, please change the value in property DbProviderFactoryName in the Massive.MySql.cs file around line 280 to Devart.Data.MySql.If you're using v1.0 currently and want to migrate to v2.0, please take a look at What's new in v2.0 page for more details about whether you'll run into the changes made. In general the breaking changes will be minor, if any.
Besides some changes as documented in the What's new in v2.0, the following features / additions are new:
If you want to add new features to Massive or have a fix for a bug, that's great! There are some rules however and if you don't meet them, I won't merge your code, no matter how long you've worked on it. This is nothing personal, and to many of you these rules might sound rigid, but this repository isn't a playground for newbies: the code is used by many people and they depend on it. It therefore has to be of high quality and changes made to the repository will live on forever so they aren't accepted without review.
params argument at the end can easily break existing code (by causing it to unintentionally compile against your new method instead of the params version). Even simply adding optional parameters to the end of an existing method will break the API, since code which is linked against a pre-compiled version of Massive will fail. I cannot accept changes like this.Note, the following is a work in progress and doesn't contain all the new API methods. It is primarily the original text written by Conery, and I'll update it when I have time. If you're unsure how to use a given method, please look at the tests.
Massive is a "wrapper" for your DB tables and uses System.Dynamic extensively. If you try to use this with C# 3.5 or below, it will explode and you will be sad. Me too honestly - I like how this doesn't require any DLLs other than what's in the GAC. Yippee.
Let's say we have a table named "Products". You create a class like this:
public class Products:DynamicModel {
//you don't have to specify the connection - Massive will use the first one it finds in your config
public Products():base("northwind", "products","productid") {}
}You could also just instantiate it inline, as needed:
var tbl = new DynamicModel("northwind", tableName:"Products", primaryKeyField:"ProductID");Or ignore the object hierarchy altogether:
Massive.DB.Current.Query(...);Now you can query thus:
var table = new Products();
//grab all the products
var products = table.ANo open issues yet, or sync has not completed.