All Projects → zzzprojects → Nmemory

zzzprojects / Nmemory

Licence: mit

Library Powered By

This library is powered by Entity Framework Extensions

Entity Framework Extensions

What's NMemory?

NMemory is a lightweight non-persistent in-memory relational database engine that is purely written in C# and can be hosted by .NET applications. It supports traditional database features like indexes, foreign key relations, transaction handling and isolation, stored procedures, query optimization.

Getting started

public class Person
{
    public int Id { get; set; }

    public string Name { get; set; }
}

public class Group
{
    public int Id { get; set; }

    public string Name { get; set; }
}

public class MyDatabase : Database
{
    public MyDatabase()
    {
        var peopleTable = base.Tables.Create<Person, int>(p => p.Id);
        var groupTable = base.Tables.Create<Group, int>(g => g.Id);

        var peopleGroupIdIndex = peopleTable.CreateIndex(
            new RedBlackTreeIndexFactory<Person>(), 
            p => p.GroupId);

        this.Tables.CreateRelation(
            groupTable.PrimaryKeyIndex, 
            peopleGroupIdIndex, 
            x => x, 
            x => x);

        this.People = peopleTable;
        this.Groups = groupTable;
    }

    public ITable<Person> People { get; private set; }

    public ITable<Group> Groups { get; private set; }
}
  • Create a database instance and some data
MyDatabase db = new MyDatabase();

db.Groups.Insert(new Group { 
    Id = 1, 
    Name = "Alpha Group" });

db.Groups.Insert(new Group { 
    Id = 2, 
    Name = "Beta Group" });

db.People.Insert(new Person { 
    Id = 1, 
    Name = "John Doe", 
    GroupId = 1, 
    BirthDay = new DateTime(1966, 4, 12) });
  • Perform queries
var query =
    from p in db.People
    join g in db.Groups on p.GroupId equals g.Id
    select new { Name = p.Name, Group = g.Name };
    
query.ToList()
  • Manipulate data
var q = db.Groups.Where(x => x.Name.StartsWith("B"));

// Update command
q.Update(x => new Group { Name = x.Name + " (taged)" });

// Delete command
q.Delete();

Useful links

Contribute

You want to help us? Your donation directly helps us maintaining and growing ZZZ Free Projects. We can’t thank you enough for your support.

Why should I contribute to this free & open source library?

We all love free and open source libraries! But there is a catch! Nothing is free in this world. Contributions allow us to spend more of our time on: Bug Fix, Content Writing, Development and Support.

We NEED your help. Last year alone, we spent over 3000 hours maintaining all our open source libraries.

How much should I contribute?

Any amount is much appreciated. All our libraries together have more than 100 million downloads, if everyone could contribute a tiny amount, it would help us to make the .NET community a better place to code!

Another great free way to contribute is spreading the word about the library!

A HUGE THANKS for your help.

More Projects

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].