.NET Core Data Access
- I want to mention Lucene.NET .
- OLE DB won’t be supported by .NET Core.
- nHibernate does not support .NET Core at this date.
- Support for .NET Core is now available , both through EF Core and directly through the MySQL Connector for .NET Core .
- MongoDB is a document database with an official .NET driver that supports .NET Core .
A first-hand look from the .NET engineering teams
@dotnet: .NET Core Data Access, relational, ORM, NoSql
.NET Core was released a few months ago, and data access libraries for most databases, both relational and NoSQL are now available. In this post, I’ll detail what client libraries are available, as well as show code samples for each of them.
Entity Framework is Microsoft’s Object-Relational Mapper for .NET, and as such is one of the most-used data access technologies for .NET. EF Core, released simultaneously with .NET Core, is a lightweight and extensible version of Entity Framework that works on both .NET Core and .NET Framework. It has support for Microsoft SQL Server, SQLite, PostgreSQL, MySQL, Microsoft SQL Server Compact Edition, with more, such as DB2 and Oracle, to come.
What follows is an example of EF Core code accessing a blog’s database. The full tutorial can be found on the EF documentation site.
Dapper is a micro-ORM built and maintained by StackExchange engineers. It focuses on performance, and can map the results of a query to a strongly-typed list, or to dynamic objects. .NET Core support is currently in beta.
PostgreSQL is an open source relational database with a devoted following. The Npgsql client library supports .NET Core.
Another interesting library for PostgreSQL that is compatible with .NET Core is Marten. Marten uses PostgreSQL storage to implements a document database.
MySQL is one of the most commonly used relational databases on the market and is open source. Support for .NET Core is now available, both through EF Core and directly through the MySQL Connector for .NET Core.
SQLite is a self-contained, embedded relational database that is released in the public domain. SQLite is lightweight (less than 1MB), cross-platform, and is extremely easy to embed and deploy with an application, which explains how it quietly became the most widely deployed database in the world. It’s commonly used as an application file format.
You can use SQLite with EF Core, or you can talk to a SQLite database directly using the Microsoft.Data.Sqlite library that is maintained by the ASP.NET team.
There’s another SQLite package that’s compatible with .NET Core called SQLitePCL.raw.
Azure DocumentDB is a NoSQL database service built for fast and predictable performance, high availability, automatic scaling, and ease of development. Its flexible data model, consistent low latencies, and rich query capabilities make it a great fit for web, mobile, gaming, IoT, and many other applications that need seamless scale. Read more in the DocumentDB introduction. DocumentDB databases can now be used as the data store for apps written for MongoDB. Using existing drivers for MongoDB, applications can easily and transparently communicate with DocumentDB, in many cases by simply changing a connection string. The next version of the DocumentDB client library, which will be available around the Connect event, supports .NET Core.
MongoDB is a document database with an official .NET driver that supports .NET Core.
RavenDB is a document database that is not only compatible with .NET Core, it’s also built with it.
Redis is one of the most popular key-value stores.
StackExchange.Redis is a high performance Redis client that is maintained by the StackExchange team.
ServiceStack has its own Redis client library, that is compatible with .NET Core, like the rest of ServiceStack.
Apache Cassandra is a highly scalable and fault-tolerant NoSQL database. DataStax is a C# driver for Cassandra with built-in support for mapping Cassandra data to CLR objects. The latest version is compatible with .NET Core.
CouchBase is an open source document database that is popular in mobile applications. The offical Couchbase client library is compatible with .NET Core.
CouchDB is a document database that I personally like a lot for its simplicity. It can scale from small devices such as a Raspberry Pi to cloud applications. It uses a very simple HTTP and JSON-based API, which limits the need for a client library. C# client libraries do exist, but none of them support .NET Core today as far as I can tell except for Kanapa which hasn’t been updated for a while. It’s very easy to interact with the database through its REST API nonetheless.
Neo4j is a graph database, which means that it establishes relationships not between tables but between data nodes, and treats these relationships as first class semantically rich entities that carry data and can be queried on. Readify is a .NET Core-compatible client for Neo4j.
The full sample can be found in Tugberk Ugurlu’s blog post “Getting Started with Neo4j in .NET with Neo4jClient Library”
RethinkDB is a document database that can stream real-time result updates to a query. RethinkDb.Driver is a .NET Core driver for RethinkDB that covers 100% of the features of the official Java driver.
YesSql is an interesting library that implements a transactional document database on top of relational stores such as SQL Server.
Finally, I want to mention Lucene.NET. It’s not technically a database, but it’s so useful in setting up full-text search on a data-driven project that a post on data access wouldn’t be complete without it. The team has put a lot of work into the new version of Lucene to implement new features and major improvements, and they also made it compatible with .NET Core. It’s still early, but prerelease packages will soon be available.
OLE DB has been a great way to access various data sources in a uniform manner, but it was based on COM, which is a Windows-only technology, and as such was not the best fit for a cross-platform technology such as .NET Core. It is also unsupported in SQL Server versions 2014 and later. For those reasons, OLE DB won’t be supported by .NET Core.
More database support for .NET Core will no doubt become available in the future, and we’ll make sure to highlight new client libraries in our Week in .NET posts as they get announced. In the meantime, I hope this post helps get you started with .NET Core application development.
Well, the way I see it, what database engine you use should be determined by your application. For instance, Content Management Systems are heavily slanted towards document databases because content items are typically composite documents with a fluid schema. Then on top of that, you can choose to use something like an ORM to improve productivity.
There are of course many factors that enter such decisions, and the post wasn’t written with the goal of helping you make them (maybe that could be for another post, although there is plenty of existing literature). My goal in writing this post was to show what choices exist on .NET Core, and to point readers in the right direction for their specific choice. I hope this makes sense.