Я пытаюсь понять, можно ли придерживаться мантры «Программа против интерфейса, а не реализации». при использовании 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, который можно использовать таким образом?
Если это не лучший способ, как дополнительно отделить БД от фактического приложения, я хотел бы услышать предложения от ты.