Я использую Linq2Sql для своего слоя DAL, и он у меня есть как отдельный проект. В моем доменном проекте у меня есть интерфейс репозитория, который я затем реализую, используя собственный Linq2SqlCarRepository в моем проекте DAL, этот класс объединяет сгенерированные классы Linq2Sql.
например.
В Car.Core проекте
public interface ICarRepository
{
IQueryable<Car> GetAllCars();
void Add(Car);
}
У меня есть реализация интерфейса, который оборачивает доступ к сгенерированному классу Linq2Sql.
Проект Car.Data
public class SqlCarRepository : ICarRepository
{
private CarDataContext _context;
public SqlCarRepository()
{
_context = new CarDataContext();
}
#region ICarRepository Members
public IQueryable<Car> GetAllCars()
{
return _context.Cars;
}
Затем у меня есть тестовый проект Car.Data.Test, который затем использует mocks для насмешки ICarRepository и тестирования. Я думаю, что это немного отличается от того, что вы описываете. Но я думаю, что вы хотите попытаться отделить ваш DAL от вашего приложения, так что это периферийное устройство, которое можно заменить, если вы хотите.
У меня не все полностью отсортировано, но у меня есть следующие проекты:
Car.Core --- All the interfaces and domain objects, DTO's etc
Car.Core.Tests --- The tests of the core business logic.
Car.Web --- Asp.net MVC frontend
Car.Web.Tests --- Tests for the website
Car.Data --- The Linq2Sql stuff lives in here
Car.Data.Tests --- The tests for the DAL layer
Это то, что у меня есть в настоящее время, хотя, возможно, это не лучший способ сделать что-то сейчас.
Я бы рекомендовал прочитать The Onion Architecture и посмотреть MVC StoreFront видео для вдохновения; удачи.