You cannot use the Entity Framework because it does not work with Access databases.
You can use NHibernate with MS Access, although NH does not support Access out of the box.
You need NHibernate.JetDriver from NHContrib and here are sample settings for the NH configuration file.
If I recall correctly, the NH Contrib must be compiled against the exact version of NH that you are using, so you probably need to download the source code and compile it yourself.
Alternatively, you can use one of many micro-ORMs, such as Qaru own Dapper .
Dapper is database independent, so it can connect to everything, including Access. Quote from the official website:
Will it work with my db provider?
Dapper does not have specific implementation details for a specific database; it works in all .net ado providers including sqlite, sqlce, firebird, oracle, MySQL, and SQL Server
The disadvantage is that since Dapper is a DB agnostic, you need to implement some useful properties like paging .
EDIT:
IMO Dapper - in "pretty simple for quick transition."
Take a look at this:
( full demo project here )
using System; using System.Data.OleDb; using Dapper; namespace DapperExample { class Program { static void Main(string[] args) { using (var con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb")) { var list = con.Query<Product>("select * from products"); Console.WriteLine("map to a strongly typed list:"); foreach (var item in list) { Console.WriteLine(item.ProductNumber + " : " + item.Description); } Console.WriteLine(); var list2 = con.Query("select * from products"); Console.WriteLine("map to a list of dynamic objects:"); foreach (var item in list2) { Console.WriteLine(item.ProductNumber + " : " + item.Description); } Console.ReadLine(); } } } public class Product { public string ProductNumber { get; set; } public string Description { get; set; } } }
There are two different requests in this code example.
The first displays a strongly typed list, for example. the result is IEnumerable<Product> . Of course, he needs a Product class that he can map.
The second query returns IEnumerable<Dynamic> (> = .NET 4.0), which means that properties are evaluated on the fly, and you do not need to define the class before, but the disadvantage is that you lose type safety (and IntelliSense).
My personal opinion is that security of the missing type is a transaction breaker for me (I prefer the first query syntax), but maybe this is something for you.