Я использую 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 который затем использует издевается для имитации 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 для вдохновения; удачи.
Я прочитал «Если бы я создал проект уровня данных, я бы переместил все мои репо на этот проект?» вопрос, как вы уже используете шаблон репозитория, предложенный в ответах ниже, но, видимо, вам также нужно сделать какой-то доступ к базе данных в некоторых ваших тестах? Обычно это означает, что вы действительно тестируете Linq для SQL, чего я ожидал бы от инженеров Microsoft уже.Я бы посоветовал вам избегать этих методов и протестировать ваши репозитории с помощью бэкэнда memorycontext, как описано в статье Jason Jones. – AHM