Ich verwende Linq2Sql für meine DAL-Schicht und habe sie als separates Projekt. In meinem Domain-Projekt habe ich eine Repository-Schnittstelle, die ich dann mit einem benutzerdefinierten Linq2SqlCarRepository in meinem DAL-Projekt implementiere. Diese Klasse kapselt die generierten Linq2Sql-Klassen.
z. B. Im Car.Core-Projekt
public interface ICarRepository
{
IQueryable GetAllCars();
void Add(Car);
}
Dann habe ich eine Implementierung der Schnittstelle, die den Zugriff auf die generierte Linq2Sql-Klasse kapselt.
Car.Data-Projekt
public class SqlCarRepository : ICarRepository
{
private CarDataContext _context;
public SqlCarRepository()
{
_context = new CarDataContext();
}
#region ICarRepository Members
public IQueryable GetAllCars()
{
return _context.Cars;
}
Dann habe ich ein Testprojekt Car.Data.Test, das Mocks verwendet, um das ICarRepository zu mocken und zu testen. Ich denke, das ist etwas anders als das, was du beschreibst. Aber ich denke, du möchtest versuchen, deine DAL von deiner Anwendung zu trennen, damit sie peripher ist und bei Bedarf ausgetauscht werden kann.
Ich habe noch nicht alles komplett sortiert, aber ich habe derzeit diese Projekte:
Car.Core --- Alle Schnittstellen und Domänenobjekte, DTOs usw.
Car.Core.Tests --- Die Tests der Kerngeschäftslogik.
Car.Web --- Asp.net MVC Frontend
Car.Web.Tests --- Tests für die Website
Car.Data --- Hier befinden sich die Linq2Sql-Dinge
Car.Data.Tests --- Die Tests für die DAL-Schicht
Das ist das, was ich derzeit habe, obwohl es vielleicht nicht der beste Weg ist, die Dinge jetzt zu tun.
Ich empfehle, The Onion Architecture durchzulesen und die MVC StoreFront -Videos zur Inspiration anzusehen; viel Glück.