|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
Всем здравствуйте! Для своего Linq провайдера к БД, потребовалось написать класс обертку Хранимых процедур, как известно хранимкам в большинстве своем потребуется передавать параметры. Поскольку при работе через linq запрос выполняется в тот момент когда мы попытаемся перечислить результат, то напрямую в метод Execute передать параметры так просто не получится. В итоге возникла мысль написать пару методов расширений для IQueryable<T> (AddParameter, ClearParameters) и передавать эти параметры через дерево выражений. Подскажите пожалуйста как сконструировать это самое дерево? Второй день не могу понять как это реализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2013, 19:49 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
xpoft2010, Никто не знает/не задавался такой целью? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2013, 09:08 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
Цель непонятна. Что мешает сделать через классический DbCommand, ведь тут явно динамика. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2013, 12:14 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
МСУЦель непонятна. Что мешает сделать через классический DbCommand, ведь тут явно динамика. Цель, сделать свой Linq провайдер, соответствующий свое спецификации. Передавать через Expressions это разумно с той точки зрения, что вся инфраструктура Linq построена на них. Если параметры передавать в виде коллекции неких объектов, то начинают появляться костыли в архитектуре. (Объект DbCommand торчит public'ом из реализации IQueryProvider + вместо разработки единого посетителя дерева придётся разрабатывать отдельные провайдеры для хранимых процедур и для вьюх и.т.п, все это не так уж и сложно по сути, но начинает попахивать говнокодом). Динамика? Как то я бы не решился назвать параметризованный запрос динамикой. :/ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 08:31 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
xpoft2010Передавать через Expressions это разумно с той точки зрения, что вся инфраструктура Linq построена на них. Не говори глупости. Entity Framework, Linq to SQL, NHibernate и прочие ORM так или иначе являются врапперами над DbCommand. Expressions тут вообще не при делах, на Expressions запрос к БД не выполнишь. xpoft2010Если параметры передавать в виде коллекции неких объектов, то начинают появляться костыли в архитектуре. Странное утверждение. Наличие коллекции неких объектов является признаком плохой архитектуры? xpoft2010Объект DbCommand торчит public'ом из реализации IQueryProvider А кто говорит, что DbCommand нужно публиковать в твоём супер провайдере? Используй внутри методов или используй приватные поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 11:32 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
xpoft2010, не стыкуется "Для своего Linq провайдера к БД" и "как сконструировать это самое дерево" если вы написали своего провайдера, и у вас возник вопрос - как сконструировать это самое дерево то вы или код банально спиз...и, не понимая его, или вы врете что написали своего провайдера, одно из двух... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 11:46 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
А еще очень смутил вот этот бред... xpoft2010Поскольку при работе через linq запрос выполняется в тот момент когда мы попытаемся перечислить результат, то напрямую в метод Execute передать параметры так просто не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 12:00 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
То ли автора имеет слабое представление о linq и lazy loading, то ли он просто сам не понимает, чего хочет. Есть некий экземпляр класса T, есть некая IQueryable<T>. Какие тут еще хранимые процедуры, откуда? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 12:02 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
МСУНе говори глупости. Entity Framework, Linq to SQL, NHibernate и прочие ORM так или иначе являются врапперами над DbCommand. Expressions тут вообще не при делах, на Expressions запрос к БД не выполнишь. В чем глупость что то я не пойму? Я задал вопрос как передать параметры для построения запроса который будет получать данные из селективной хранимой процедуры в БД. А вы мне рассказываете, как обрабатывается полученный результат. Да то что вы говорите так и есть, но как ответ на вопрос как раз таки звучит как глупость! А еще очень смутил вот этот бред... МСУ...на Expressions запрос к БД не выполнишь. А на основе чего строится запрос к БД внутри провайдера? МСУxpoft2010 Если параметры передавать в виде коллекции неких объектов, то начинают появляться костыли в архитектуре. Странное утверждение. Наличие коллекции неких объектов является признаком плохой архитектуры? Советую полностью прочитать сообщение там все написано. Может смутило слово провайдеры, поясню, имелась ввиду реализация IQueryProvider отдельно для построения запроса через хп, и отдельная для получения результата через вьюшки. МСУЕсть некий экземпляр класса T, есть некая IQueryable<T>. Какие тут еще хранимые процедуры, откуда? А так сложно представить, что данные будут браться не напрямую из таблиц, а будут возвращаться хранимой процедурой? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 12:55 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
Где-то в степиxpoft2010, не стыкуется "Для своего Linq провайдера к БД" и "как сконструировать это самое дерево" если вы написали своего провайдера, и у вас возник вопрос - как сконструировать это самое дерево то вы или код банально спиз...и, не понимая его, или вы врете что написали своего провайдера, одно из двух... Оффтоп. Вас никто не просил рассуждать откуда этот код, и написано ли что то. Есть ответ на вопрос пожалуйста, слушаю, нет, не х... здесь писать для увеличения счетчика постов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 12:57 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
МСУА еще очень смутил вот этот бред... xpoft2010Поскольку при работе через linq запрос выполняется в тот момент когда мы попытаемся перечислить результат, то напрямую в метод Execute передать параметры так просто не получится. В любой книге по linq в первых же главах рассказывается об отложенном выполнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 13:05 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
xpoft2010, вы потрудитесь корректно ставить вопрос "Для своего Linq провайдера к БД" а не кидать понты, типа вот я сам написал своего провайдера, это дело не простое и не быстрое отпарсить визитором все дерево выражений и перевести в sql в зависимости от нет провайдера со всеми потрохами и джойнами джойнов ( это я говорю со всей уверенностью, так как исполнял такие вещи), а коль это все пройдено для ВАс, то вопрос -сконструировать это самое дерево это говно вопрос для того кто написал своего провайдера. зы А параметры можете передавать словарем, ничего тут страшного нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 13:10 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
вернее не словарем а массивом, ключ тут нафиг не нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 13:13 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
xpoft2010В чем глупость что то я не пойму? Я задал вопрос как передать параметры для построения запроса который будет получать данные из селективной хранимой процедуры в БД. А вы мне рассказываете, как обрабатывается полученный результат. Да то что вы говорите так и есть, но как ответ на вопрос как раз таки звучит как глупость! Посмотри, как в L2S/EF реализуется работа с хранимыми процедурами. Никаких Expressions, процедура - это обычный метод контекста, принимающий конкретные параметры и возвращающий конкретный результат. Всё. О каких таких lazy в IQueryable идет речь, я не понимаю. В этом и глупость. xpoft2010А еще очень смутил вот этот бред... МСУ...на Expressions запрос к БД не выполнишь. А на основе чего строится запрос к БД внутри провайдера? Включи голову: http://msdn.microsoft.com/ru-ru/library/system.data.entityclient.entityparameter(v=vs.90).aspx Ты понимаешь разницу между выполнением запроса и построением запроса? xpoft2010Советую полностью прочитать сообщение там все написано. Может смутило слово провайдеры, поясню, имелась ввиду реализация IQueryProvider отдельно для построения запроса через хп, и отдельная для получения результата через вьюшки. Всё, что ты видишь - это впраппинг над DbParameter, DbCommand и DbConnection. Ничего сверхестественного. Более того, не нужно бояться и паблик свойств вида DbCommand. EF поддерживает и нетипизированную работу с БД: http://msdn.microsoft.com/ru-ru/library/vstudio/ee358758(v=vs.100).aspx xpoft2010МСУЕсть некий экземпляр класса T, есть некая IQueryable<T>. Какие тут еще хранимые процедуры, откуда? А так сложно представить, что данные будут браться не напрямую из таблиц, а будут возвращаться хранимой процедурой? А я тебе о чем? Такое ощущение, что я разговариваю с инопланетянином... Поясни вот этот вброс? xpoft2010Поскольку при работе через linq запрос выполняется в тот момент когда мы попытаемся перечислить результат, то напрямую в метод Execute передать параметры так просто не получится. Ты о чём? xpoft2010МСУА еще очень смутил вот этот бред... пропущено... В любой книге по linq в первых же главах рассказывается об отложенном выполнении. Отложенное выполнение хранимых процедур? Пруф в студию. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 13:22 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
МСУ, а я бы и DbConnection вытащил наружу, может быть даже и тот который под трансакции ложится вдруг пользователь захочет исполнить что нить своё по старинке, хотя строки подключения вполне хватит.. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 13:38 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
Где-то в степиМСУ, а я бы и DbConnection вытащил наружу, может быть даже и тот который под трансакции ложится вдруг пользователь захочет исполнить что нить своё по старинке, хотя строки подключения вполне хватит.. Правильно говоришь, Жень. В EF тоже так делают: EntityConnection.StoreConnection светит наружу честным DbConnection. Если нужно обратиться на самый нижний уровень, всегда пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 14:29 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
Где-то в степиxpoft2010, вы потрудитесь корректно ставить вопрос "Для своего Linq провайдера к БД" а не кидать понты, типа вот я сам написал своего провайдера, это дело не простое и не быстрое отпарсить визитором все дерево выражений и перевести в sql в зависимости от нет провайдера со всеми потрохами и джойнами джойнов ( это я говорю со всей уверенностью, так как исполнял такие вещи), а коль это все пройдено для ВАс, то вопрос -сконструировать это самое дерево это говно вопрос для того кто написал своего провайдера. зы А параметры можете передавать словарем, ничего тут страшного нет. Ты адекватный вообще? Судя по постам не совсем, явно имеются какие то отклонения в мировосприятии, заниженная самооценка среди которых самое меньшее что можно сказать на первый взгляд. Ты где панты увидел? Теперь к вопросу(ткну носом, если не увидел сам): xpoft2010Подскажите пожалуйста как сконструировать это самое дерево? Далее повторюсь, я задал конкретный вопрос, ибо не понимаю как строятся деревья выражений для построения запроса, если есть ответ, то я внимаю со всей серъезностью, нет, то не утруждайтесь писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2013, 13:37 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
xpoft2010, тынц ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2013, 13:41 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
МСУГде-то в степиМСУ, а я бы и DbConnection вытащил наружу, может быть даже и тот который под трансакции ложится вдруг пользователь захочет исполнить что нить своё по старинке, хотя строки подключения вполне хватит.. Правильно говоришь, Жень. В EF тоже так делают: EntityConnection.StoreConnection светит наружу честным DbConnection. Если нужно обратиться на самый нижний уровень, всегда пожалуйста. Сгенерированный контекст принимает в одном из конструкторов подключение, так что к нему по любому доступ есть по умолчанию, но речь вообще не об этом. Делать паблик поле с доступом к DbCommand на мой взгляд не есть разумная идея, поскольку можно обойтись и без него, разобравшись лишь в том, как передать параметры через выражения. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2013, 13:41 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
Где-то в степи, Что и требовалось доказать. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2013, 13:55 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
МСУПосмотри, как в L2S/EF реализуется работа с хранимыми процедурами. Никаких Expressions, процедура - это обычный метод контекста, принимающий конкретные параметры и возвращающий конкретный результат. Всё. О каких таких lazy в IQueryable идет речь, я не понимаю. В этом и глупость. Да, видел конечно, но я бы не заводил эту тему, если бы это было именно то что мне нужно. МСУxpoft2010 МСУ Есть некий экземпляр класса T, есть некая IQueryable<T>. Какие тут еще хранимые процедуры, откуда? А так сложно представить, что данные будут браться не напрямую из таблиц, а будут возвращаться хранимой процедурой? А я тебе о чем? Такое ощущение, что я разговариваю с инопланетянином... Поясни вот этот вброс? С иноплянетянином говоришь... такая ж фигня. Ты перечитай свой пост пожалуйста, а потом мой ответ на него, если все еще потребуются мои пояснения, сообщи. МСУОтложенное выполнение хранимых процедур? Пруф в студию. Есть такая задача, не пойму, что вызывает такую бурю негодования? Хотелось бы чтобы вопрос воспринимался в отрыве от контекста, повторяюсь: "Как строятся деревья выражений?", есть ссылка где почитать, в студию, мне большего не нужно, я разберусь. Все примеры которые встречал, заключались в разборе конкретного выражения, но примера с разбором дерева я не видел. (Из анализа кода разбирающего дерево уже смог бы понять в каком напрвлении двигаться дальше, чтобы его собрать). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2013, 13:57 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
xpoft2010"Как строятся деревья выражений?", есть ссылка где почитать, в студию, мне большего не нужно, я разберусь. Все примеры которые встречал, заключались в разборе конкретного выражения, но примера с разбором дерева я не видел. (Из анализа кода разбирающего дерево уже смог бы понять в каком напрвлении двигаться дальше, чтобы его собрать). Глянь исходники вот этого известного ORM http://nuget.org/packages/NHibernate.Linq Но я тебя так и не понял, что ты хочешь... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2013, 18:32 |
|
Передать параметры через дерево выражений.
|
|||
---|---|---|---|
#18+
МСУxpoft2010"Как строятся деревья выражений?", есть ссылка где почитать, в студию, мне большего не нужно, я разберусь. Все примеры которые встречал, заключались в разборе конкретного выражения, но примера с разбором дерева я не видел. (Из анализа кода разбирающего дерево уже смог бы понять в каком напрвлении двигаться дальше, чтобы его собрать). Глянь исходники вот этого известного ORM http://nuget.org/packages/NHibernate.Linq Но я тебя так и не понял, что ты хочешь... Спасибо, ушел смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2013, 10:31 |
|
|
start [/forum/topic.php?fid=17&fpage=26&tid=1350028]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 146ms |
0 / 0 |