@ liammclennan
Который вернет IEnumerable. ... Linq-to-sql - это ORM. Это не влияет на способ разработки N-уровневого приложения. Вы используете его так же, как и любой другой ORM.
Тогда, я думаю, я все еще в замешательстве. Да, Linq-to-Sql - это ORM; но, насколько я могу судить, я все еще засоряю свой код переднего плана встроенными операторами типа sql (linq, а не sql ...., но все же я чувствую, что это следует абстрагировать от внешнего интерфейса).
Предположим, я обернул оператор LINQ, который мы использовали в качестве примера в методе. Насколько я могу судить, единственный способ вернуть это так:
public class EmployeesDAL
{
public IEnumerable LoadEmployeesAndManagers()
{
MyCompanyContext context = new MyCompanyContext();
var emps = from e in context.Employees
join m in context.Employees
on e.ManagerEmpID equals m.EmpID
select new
{ e,
m.FullName
};
return emps;
}
}
Из моего внешнего кода я бы сделал что-то вроде этого:
EmployeesDAL dal = new EmployeesDAL;
var emps = dal.LoadEmployeesAndManagers();
Это, конечно, возвращает IEnumerable; но я не могу использовать это как любой другой ORM, как вы говорите (если, конечно, я неправильно понимаю), потому что я не могу сделать это (опять же, это надуманный пример):
txtEmployeeName.Text = emps[0].FullName
Это то, что я имел в виду под "я теряю сильное типизированное совершенство". Я думаю, что я начинаю соглашаться с Crucible; что LINQ-to-SQL не был разработан для такого использования. Опять же, если я не вижу вещи правильно, кто-то покажет мне путь:)