Re[9]: Entity Framework за! и против!
От: Ночной Смотрящий Россия  
Дата: 18.08.14 21:28
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

НС>>Чтобы писать код не задумываясь о деталях реализации ORM. Сейчас таких ORM нет.

G>В первую очередь нужно задумываться о той СУБД, для которой пишешь.

И это тоже. Но, по опыту, работать на разных СУБД все таки намного проще, чем работать на разных ORM. Первое у меня еще получалось, а вот второе — никогда. Даже переезд с blt linq на linq2db на крупных проектах совсем нетривиальная задача.

НС>>Проблема не в транслируемости конструкций, а в том что вполне осмысленные, нормально выглядящие и работающие на linq2objects конструкции на SQL фик переведешь.

G>Обратное также верно.

Да не особо. Приведенные тобой примере это точно не доказывают.

НС>>СТЕ сама по себе линку просто не нужна. А поддердка рекурсии — вопрос конкретных провайдеров, которым просто никто не занимался всерьез.

G>В linq нет средств для рекурсии.

Т.е. с CTE без рекурсии вопросов нет? А средства для рекурсии есть, просто их придется иначе выражать. Идея проста:

var q =
  db
    .SomeEntity
    .With(db.SomeEntity, (e1, e2) => new {e1, e2})
    .Select(...);


Но это так, мелочь. Куда интереснее другое — рекурсия в SQL в 99% случаев используется для запросов по деревьям. А запросы по деревьям на линке выражаются вообще без рекурсии, потому что линк плоской моделью не ограничен. Т.е. на линке в модели дерево можно описать сразу деревом, а рекурсивные запросы пусть строит провайдер.

G>>>3) MERGE-оператор

НС>>Тоже не проблема.
G>Что значит "не проблема" ?

То и значит что на линке это легко выражается, просто существующие провайдеры такое не умеют.

G>Увы в linq таких средств нет


Ты query comprehension с linq не путаешь? В QC и DML нет, а в linq провайдерах оно таки есть.

НС>>При этом есть несколько моментов, которые действительно несколько фигово в линке выражаются по сравнению с сиквелом. Но ни один из них ты не упомянул.

G>То что ты не видишь не значит что их нет.

Ну так давай, рассказывай. А то тот же PIVOT/UNPIVOT, который легко описывается extension методом явно на такое не тянет.

НС>>Эрик? Ссылку можно? А то я немножко на эту тему с ним общался, и ничего подобного не услышал.

G>Это очень давно было, сейчас не найду даже.

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

НС>>Я, кажется, вполне понятно написал. Любая ОРМ, если попытаться от нее абстрагироваться, приведет к leaky abstraction. Без вариантов. Что тебе в этом утверждении непонятно?

G>ты отвечаешь не на то, что я писал.

Извини, но я вообще то и не тебе отвечал по поводу абстракций.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.