Что именно Composable означает? - PullRequest
10 голосов
/ 20 декабря 2010

В настоящее время я читаю книгу Рецептов EF4 Ларри Тенни и Зеешана Хирани.Во время чтения книги я часто сталкивался со словом «Composable» и имел общее представление о том, что означает это слово, но без точного определения.

Мне было интересно, что такое точное определение и чтоделает (скажем, например) функцию «Composable» или нет?

Для большего контекста, проверьте это FAQ (найдите слово «Composable» на странице, есть только одна), котораяочень похож на тот же контекст в книге ..

Вот параграф, в котором я запутался в том, что это значит (со страницы книги 397):

Параметры дляфункции, определенные в модели, не показывают направление.Нет никаких «out» параметров, только подразумеваемых «in» параметров.Причина этого заключается в том, что определяемые моделью функции компонуются и могут использоваться как часть запросов LINQ.Это не позволяет им возвращать значения в выходных параметрах.

Ответы [ 2 ]

6 голосов
/ 20 декабря 2010

Композиционность в этом смысле означает, что вы можете еще больше уточнить запрос.

EF-запросы очень сочетаемы.Таким образом, вы можете взять запрос и изменить его:

var q = Context.MyStuff;
q = q.Where(s => s.IsGood);
var r = from s in q select new { Id = s.Id, Description = s.Description };
r = r.OrderBy(s => s.Description);
r = r.Take(100);

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

Службы данных WCF, OTOH, гораздо более ограничены.Вы можете проецировать, и вы можете заказать, но вы не можете заказать на проекции.Поэтому приведенный выше код не будет работать, хотя его можно настроить и изменить порядок работы.

2 голосов
/ 20 декабря 2010

Это относится к тому, что называется Функции, определяемые моделью .

По сути, вы определяете эти MDF в своем EDMX, затем вы можете «составлять» эти запросы в своем выражении LINQ.

Например, скажем, у вас есть скалярный UDF в вашей БД, который возвращает возраст человека, затем вы можете отобразить его в своей концептуальной модели и сделать это:

var results = from person in ctx.People
              where GetAge(person) > 35 // GetAge is a UDF mapped in your EDMX
              select person;

Здесь есть статья , которая объясняет это немного подробнее.

Я их мало использовал - но я считаю, что у него есть некоторые ограничения (например, вы не можете использовать функции с табличными значениями, только скалярные).

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...