Программирование с использованием интерфейсов и Entity Framework 4.0

Я пытаюсь понять, можно ли придерживаться мантры «Программа против интерфейса, а не реализации». при использовании Entity Framework 4.0.

Хотя я нашел страницу, объясняющую, как придерживаться вышеупомянутого правила при использовании Linq-to-SQL ( см. здесь ), я очень хочу знать, будет ли это можно сделать это с помощью Entity Framework (также используя Linq).

Обычно он используется следующим образом:

var query = from pages in dataContext.Pages where pages.IsPublished select pages;

foreach (Page page in query)
{
    // do something with page...
    var routeQuery = from routes in page.Route where route.IsValid select routes;

    foreach (Route route in routeQuery)
    {
        // do something with route
    }
}

Но я бы хотел использовать его так:

var query = from pages in dataContext.Pages where pages.IsPublished select pages;

foreach (IPage page in query)
{
    // do something with page...
    var routeQuery = from routes in page.Route where route.IsValid select routes;

    foreach (IRoute route in routeQuery)
    {
        // do something with route
    }
}

По сути, я хотел бы иметь возможность передавать DataContext Entity Framework из сборки / подсистемы, где он создается с помощью интерфейса. Вся информация, которая предоставляется контекстом данных, должна поступать в форме интерфейса, а не реального класса.

Я хотел бы сохранить фактические классы, реализующие Сущности, внутренние по отношению к сборке, и предоставлять только те интерфейсы, которые они реализуют.

Возможно ли это с помощью Entity Framework? Если нет, то есть ли какой-нибудь другой преобразователь O / R, который можно использовать таким образом?

Если это не лучший способ, как дополнительно отделить БД от фактического приложения, я хотел бы услышать предложения от ты.

7
задан Timo Kosig 14 October 2010 в 08:28
поделиться