Auf der SQL Server und .NET-Konferenz (SNEK) in Nürnberg wurde ich gefragt, ob man mit dem ADO.NET Entity Framework/LINQ-to-Entities auf Microsofts Access-Datenbanken zugreifen kann. Microsoft liefert einen solchen Treiber nicht. Auch ist mir kein Drittanbieter bekannt, der einen Entity-Framework-Treiber für Access liefert. 
  
Es gibt aber im Rahmen des LINQ IQueryable Toolkit einen direkten LINQ-Provider für Access (IQToolkit.Data.Access.dll). Bei diesem Provider, den ich selbst schon eingesetzt habe, kann man mit LINQ (einschließlich der zugehörigen Lambda-Syntax) Daten lesen und über eine API, die der von LINQ-to-SQL und ADO.NET Entity Framework ähnlich ist, auch speichern. Beispiel:
var provider = DbEntityProvider.From(@"c:\data\Northwind.accdb", 
      "Test.Northwind"); 
var ns = new NorthwindSession(provider); 
cust = ns.Customers.Single(c => c.CustomerID == "XX1");            
cust.ContactName = "Contact Modified";             
ns.SubmitChanges();
Die Klassen für die Access-Tabellen muss man allerdings selbst anlegen. (Oder sich selbst einen Generator schreiben. Ich habe mir dazu ein T4-Template gebaut). Einen Designer für Visual Studio gibt es nicht. Es reichen POCO-Klassen wie diese:
namespace Test
{
    public class Customer
    {
        public string CustomerID;
        public string ContactName;
        public string CompanyName;
        public string Phone;
        public string City;
        public string Country;
        public IList<Order> Orders;
    }
...
}
Alternativ kann man das Mapping auch durch Annotationen mit .NET-Attributen steuern:
  [Table]
  [Column(Member = "CustomerId", IsPrimaryKey = true)]
  [Column(Member = "ContactName")]
  [Column(Member = "CompanyName")]
  [Column(Member = "Phone")]
  [Column(Member = "City", DbType="NVARCHAR(20)")]
  [Column(Member = "Country")]
  [Association(Member = "Orders", KeyMembers = "CustomerID", 
       RelatedEntityID = "Orders", RelatedKeyMembers = "CustomerID")]
  public override IEntityTable<Customer> Customers
        {
            get { return base.Customers; }
        }
Andere Benutzer im Internet berichten von folgenden Lösungen zum Thema LINQ und Access, die ich aber nicht ausprobiert habe:
  
  
- Man soll LINQ-to-SQL auch für Access verwenden können. Ein Benutzer erwähnt in einem Forum, dass er das geschafft habe (aber auch hier ohne Designer).
 - Mehrfach wird auf das Produkt ALINQ verwiesen. Die zugehörige Website http://www.alinq.org/ ist aber zumindest derzeit nicht erreichbar.
 
()