Access データベースでは動作しないため、Entity Framework は使用できません。
NHibernate を MS Access で使用することは可能ですが、NH はそのままでは Access をサポートしていません。NHContribのNHibernate.JetDriverが
必要です。NH構成ファイルの設定例を次に示します。
私の記憶が正しければ、NH Contrib は使用している正確な NH バージョンに対してコンパイルする必要があるため、おそらくソース コードをダウンロードして自分でコンパイルする必要があります。
別の方法として、スタック オーバーフロー独自のDapperなど、多くのマイクロ ORM のいずれかを使用できます。
Dapper は DB に依存しないため、Access を含むあらゆるものに接続できます。公式サイトより引用:
dapper は私の db プロバイダーで動作しますか?
Dapper には DB 固有の実装の詳細はありません。sqlite、sqlce、firebird、oracle、MySQL、SQL Server を含むすべての .net ado プロバイダーで動作します。
欠点は、Dapper は DB に依存しないため、pagingなどの高度な機能を自分で実装する必要があることです。
編集:
IMO Dapperは、「かなり簡単にすばやく実行できる」カテゴリに属しています。
これを見てください:
(完全なデモプロジェクトはこちら)
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; }
}
}
このコード例には 2 つの異なるクエリがあります。
最初のものは、強く型付けされたリストにマップされます。たとえば、結果はIEnumerable<Product>です。もちろん、Productマップできるクラスが必要です。
2 番目のクエリはIEnumerable<Dynamic>(>= .NET 4.0) を返します。これは、プロパティがオンザフライで評価され、事前にクラスを定義する必要がないことを意味しますが、タイプ セーフ (および IntelliSense) が失われるという欠点があります。
私の個人的な意見では、型の安全性の欠如は私にとって大きな問題です (私は最初のクエリ構文を好みます)。