Что я сделал, так это обернул (в моем случае Linq2Sql) в свой собственный класс, который реализует шаблон хранилища, вот вставленная выдержка из предыдущего, но несколько связанного ответа.
Я бырекомендуем прочитать The Onion Architecture и посмотреть MVC StoreFront видео для вдохновения.Волшебная часть заключается в том, чтобы отодвинуть часть Linq2Sql или материал EF в одну сторону, чтобы вы не сидели на ней так сильно, как, потяните ее, если хотите, таким образом, вы можете использовать Linq2Sql или EF или NHibernate.Это больше работы, но дает вам больше гибкости.
Вот мой пример CarProject
В проекте 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;
}
Вы можете иметь EF-эквивалентный курс, или NHibernate.
У меня нетвсе это полностью отсортировано, и я все еще учусь, но в настоящее время у меня есть следующие проекты:
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
В вашем сценарии вы можете либо поместить EF в Car.Data, либо изменить его на Car.Linq2Sql и Car.EntityFramework.Не уверен, что я буду делать.