powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передать параметры через дерево выражений.
23 сообщений из 23, страница 1 из 1
Передать параметры через дерево выражений.
    #38247851
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте!

Для своего Linq провайдера к БД, потребовалось написать класс обертку Хранимых процедур, как известно хранимкам в большинстве своем потребуется передавать параметры. Поскольку при работе через linq запрос выполняется в тот момент когда мы попытаемся перечислить результат, то напрямую в метод Execute передать параметры так просто не получится. В итоге возникла мысль написать пару методов расширений для IQueryable<T> (AddParameter, ClearParameters) и передавать эти параметры через дерево выражений.

Подскажите пожалуйста как сконструировать это самое дерево? Второй день не могу понять как это реализовать.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38248503
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xpoft2010,

Никто не знает/не задавался такой целью?
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38248766
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цель непонятна. Что мешает сделать через классический DbCommand, ведь тут явно динамика.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253508
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУЦель непонятна. Что мешает сделать через классический DbCommand, ведь тут явно динамика.

Цель, сделать свой Linq провайдер, соответствующий свое спецификации. Передавать через Expressions это разумно с той точки зрения, что вся инфраструктура Linq построена на них. Если параметры передавать в виде коллекции неких объектов, то начинают появляться костыли в архитектуре. (Объект DbCommand торчит public'ом из реализации IQueryProvider + вместо разработки единого посетителя дерева придётся разрабатывать отдельные провайдеры для хранимых процедур и для вьюх и.т.п, все это не так уж и сложно по сути, но начинает попахивать говнокодом).

Динамика? Как то я бы не решился назвать параметризованный запрос динамикой. :/
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253543
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010Передавать через Expressions это разумно с той точки зрения, что вся инфраструктура Linq построена на них.
Не говори глупости. Entity Framework, Linq to SQL, NHibernate и прочие ORM так или иначе являются врапперами над DbCommand. Expressions тут вообще не при делах, на Expressions запрос к БД не выполнишь.

xpoft2010Если параметры передавать в виде коллекции неких объектов, то начинают появляться костыли в архитектуре.
Странное утверждение. Наличие коллекции неких объектов является признаком плохой архитектуры?

xpoft2010Объект DbCommand торчит public'ом из реализации IQueryProvider
А кто говорит, что DbCommand нужно публиковать в твоём супер провайдере? Используй внутри методов или используй приватные поля.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253547
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010,
не стыкуется "Для своего Linq провайдера к БД" и "как сконструировать это самое дерево"
если вы написали своего провайдера, и у вас возник вопрос - как сконструировать это самое дерево
то вы или код банально спиз...и, не понимая его, или вы врете что написали своего провайдера, одно из двух...
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253551
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще очень смутил вот этот бред...

xpoft2010Поскольку при работе через linq запрос выполняется в тот момент когда мы попытаемся перечислить результат, то напрямую в метод Execute передать параметры так просто не получится.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253552
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То ли автора имеет слабое представление о linq и lazy loading, то ли он просто сам не понимает, чего хочет.
Есть некий экземпляр класса T, есть некая IQueryable<T>. Какие тут еще хранимые процедуры, откуда?
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253572
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУНе говори глупости. Entity Framework, Linq to SQL, NHibernate и прочие ORM так или иначе являются врапперами над DbCommand. Expressions тут вообще не при делах, на Expressions запрос к БД не выполнишь.

В чем глупость что то я не пойму? Я задал вопрос как передать параметры для построения запроса который будет получать данные из селективной хранимой процедуры в БД. А вы мне рассказываете, как обрабатывается полученный результат. Да то что вы говорите так и есть, но как ответ на вопрос как раз таки звучит как глупость!

А еще очень смутил вот этот бред...

МСУ...на Expressions запрос к БД не выполнишь.

А на основе чего строится запрос к БД внутри провайдера?


МСУxpoft2010
Если параметры передавать в виде коллекции неких объектов, то начинают появляться костыли в архитектуре.

Странное утверждение. Наличие коллекции неких объектов является признаком плохой архитектуры?

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

МСУЕсть некий экземпляр класса T, есть некая IQueryable<T>. Какие тут еще хранимые процедуры, откуда?
А так сложно представить, что данные будут браться не напрямую из таблиц, а будут возвращаться хранимой процедурой?
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253574
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиxpoft2010,
не стыкуется "Для своего Linq провайдера к БД" и "как сконструировать это самое дерево"
если вы написали своего провайдера, и у вас возник вопрос - как сконструировать это самое дерево
то вы или код банально спиз...и, не понимая его, или вы врете что написали своего провайдера, одно из двух...

Оффтоп. Вас никто не просил рассуждать откуда этот код, и написано ли что то. Есть ответ на вопрос пожалуйста, слушаю, нет, не х... здесь писать для увеличения счетчика постов.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253575
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУА еще очень смутил вот этот бред...

xpoft2010Поскольку при работе через linq запрос выполняется в тот момент когда мы попытаемся перечислить результат, то напрямую в метод Execute передать параметры так просто не получится.

В любой книге по linq в первых же главах рассказывается об отложенном выполнении.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253582
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010,
вы потрудитесь корректно ставить вопрос "Для своего Linq провайдера к БД"
а не кидать понты, типа вот я сам написал своего провайдера, это дело не простое и не быстрое отпарсить визитором все дерево выражений и перевести в sql в зависимости от нет провайдера со всеми потрохами и джойнами джойнов ( это я говорю со всей уверенностью, так как исполнял такие вещи), а коль это все пройдено для ВАс, то вопрос -сконструировать это самое дерево это говно вопрос для того кто написал своего провайдера.
зы А параметры можете передавать словарем, ничего тут страшного нет.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253586
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее не словарем а массивом, ключ тут нафиг не нужен
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253594
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 в первых же главах рассказывается об отложенном выполнении.
Отложенное выполнение хранимых процедур? Пруф в студию.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253607
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,
а я бы и DbConnection вытащил наружу, может быть даже и тот который под трансакции ложится вдруг пользователь захочет исполнить что нить своё по старинке, хотя строки подключения вполне хватит..
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38253630
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиМСУ,
а я бы и DbConnection вытащил наружу, может быть даже и тот который под трансакции ложится вдруг пользователь захочет исполнить что нить своё по старинке, хотя строки подключения вполне хватит..
Правильно говоришь, Жень. В EF тоже так делают: EntityConnection.StoreConnection светит наружу честным DbConnection. Если нужно обратиться на самый нижний уровень, всегда пожалуйста.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38254234
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиxpoft2010,
вы потрудитесь корректно ставить вопрос "Для своего Linq провайдера к БД"
а не кидать понты, типа вот я сам написал своего провайдера, это дело не простое и не быстрое отпарсить визитором все дерево выражений и перевести в sql в зависимости от нет провайдера со всеми потрохами и джойнами джойнов ( это я говорю со всей уверенностью, так как исполнял такие вещи), а коль это все пройдено для ВАс, то вопрос -сконструировать это самое дерево это говно вопрос для того кто написал своего провайдера.
зы А параметры можете передавать словарем, ничего тут страшного нет.

Ты адекватный вообще? Судя по постам не совсем, явно имеются какие то отклонения в мировосприятии, заниженная самооценка среди которых самое меньшее что можно сказать на первый взгляд.
Ты где панты увидел?

Теперь к вопросу(ткну носом, если не увидел сам):

xpoft2010Подскажите пожалуйста как сконструировать это самое дерево?

Далее повторюсь, я задал конкретный вопрос, ибо не понимаю как строятся деревья выражений для построения запроса, если есть ответ, то я внимаю со всей серъезностью, нет, то не утруждайтесь писать.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38254240
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010,
тынц
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38254241
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУГде-то в степиМСУ,
а я бы и DbConnection вытащил наружу, может быть даже и тот который под трансакции ложится вдруг пользователь захочет исполнить что нить своё по старинке, хотя строки подключения вполне хватит..
Правильно говоришь, Жень. В EF тоже так делают: EntityConnection.StoreConnection светит наружу честным DbConnection. Если нужно обратиться на самый нижний уровень, всегда пожалуйста.

Сгенерированный контекст принимает в одном из конструкторов подключение, так что к нему по любому доступ есть по умолчанию, но речь вообще не об этом. Делать паблик поле с доступом к DbCommand на мой взгляд не есть разумная идея, поскольку можно обойтись и без него, разобравшись лишь в том, как передать параметры через выражения.
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38254246
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Что и требовалось доказать. ))
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38254247
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУПосмотри, как в L2S/EF реализуется работа с хранимыми процедурами. Никаких Expressions, процедура - это обычный метод контекста, принимающий конкретные параметры и возвращающий конкретный результат. Всё. О каких таких lazy в IQueryable идет речь, я не понимаю. В этом и глупость.

Да, видел конечно, но я бы не заводил эту тему, если бы это было именно то что мне нужно.

МСУxpoft2010
МСУ
Есть некий экземпляр класса T, есть некая IQueryable<T>. Какие тут еще хранимые процедуры, откуда?

А так сложно представить, что данные будут браться не напрямую из таблиц, а будут возвращаться хранимой процедурой?

А я тебе о чем? Такое ощущение, что я разговариваю с инопланетянином... Поясни вот этот вброс?

С иноплянетянином говоришь... такая ж фигня. Ты перечитай свой пост пожалуйста, а потом мой ответ на него, если все еще потребуются мои пояснения, сообщи.


МСУОтложенное выполнение хранимых процедур? Пруф в студию.

Есть такая задача, не пойму, что вызывает такую бурю негодования?


Хотелось бы чтобы вопрос воспринимался в отрыве от контекста, повторяюсь: "Как строятся деревья выражений?", есть ссылка где почитать, в студию, мне большего не нужно, я разберусь.
Все примеры которые встречал, заключались в разборе конкретного выражения, но примера с разбором дерева я не видел. (Из анализа кода разбирающего дерево уже смог бы понять в каком напрвлении двигаться дальше, чтобы его собрать).
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38254416
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010"Как строятся деревья выражений?", есть ссылка где почитать, в студию, мне большего не нужно, я разберусь.
Все примеры которые встречал, заключались в разборе конкретного выражения, но примера с разбором дерева я не видел. (Из анализа кода разбирающего дерево уже смог бы понять в каком напрвлении двигаться дальше, чтобы его собрать).
Глянь исходники вот этого известного ORM http://nuget.org/packages/NHibernate.Linq
Но я тебя так и не понял, что ты хочешь...
...
Рейтинг: 0 / 0
Передать параметры через дерево выражений.
    #38254859
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУxpoft2010"Как строятся деревья выражений?", есть ссылка где почитать, в студию, мне большего не нужно, я разберусь.
Все примеры которые встречал, заключались в разборе конкретного выражения, но примера с разбором дерева я не видел. (Из анализа кода разбирающего дерево уже смог бы понять в каком напрвлении двигаться дальше, чтобы его собрать).
Глянь исходники вот этого известного ORM http://nuget.org/packages/NHibernate.Linq
Но я тебя так и не понял, что ты хочешь...

Спасибо, ушел смотреть.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передать параметры через дерево выражений.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]