No video

ORM с нуля | Как устроены Entity Framework и Dapper? | Как реализовать IQueryable?

  Рет қаралды 12,234

Dev Jungles - Andrii Podkolzin

Dev Jungles - Andrii Podkolzin

Күн бұрын

#DevJungles #dotnet #ORM
На этом стриме будем делать свой ORM с нуля.
Смотреть его нужно для того что бы понимать как устроены Dapper и EF, который вы наверняка используете у себя на проекте. Такое понимания позволит вам их лучше использовать и поменять границы применения для будущих проектов.
Что будет?
- Напишем часть ответственную за маппинг запросов на объекты(по мотивам прошлого стрима)
- Сделаем свою реализацию IQueryable и построения SQL из Expression
- Сделаем ChangeTracker
- Сделаем включение дочерных сущностей(аналог EF Include)
- Ну и покопаем немного сорсы Dapper'а и EF.Core
Telegram канал Dev Jungles - t.me/DevJungles
Поддержать канал можно:
- Спонсорством на KZbin
- Переводом на карту или пополнением банки монобанка:
Dev Jungles KZbin Channel Fund
send.monobank....
Номер карты банки:
5375 4112 0230 1466
- Или криптой:
Binance Id: 479881646
BTC - 18C3jsFYwviN5FvzpAt4uMWRfUeVKvdWxy
ETH - 0x2903f63ba9009732272e91a299053b9d7b623216
USDT on ERC20 - 0x2903f63ba9009732272e91a299053b9d7b623216
USDT on TRC20 - TSmS5RzQKbWdxZkoM2oRo9HK8FYBaq744T
LTC - LN3CkrnvZLZTXDUhqTy1gUKMVpLjEPA4G2

Пікірлер: 65
@hohlocit
@hohlocit Жыл бұрын
Привет, не часто пишу комментарии, но контент супер. Спасибо за твои старания☺
@DevJungles
@DevJungles Жыл бұрын
Спасибо)
@mr_smind
@mr_smind Жыл бұрын
Отличный стрим, спасибо огромное!
@nick_stelmakh
@nick_stelmakh Жыл бұрын
Як завжди - хорош 😎
@DevJungles
@DevJungles Жыл бұрын
Дякую)
@skulidropek607
@skulidropek607 Жыл бұрын
Лайк
@SHKIPPER989
@SHKIPPER989 Жыл бұрын
Топчик_)
@kandreyk9159
@kandreyk9159 Жыл бұрын
есть пакет ExpressionTreeToString которым удобно разглядывать выражения, типа var q = db.Where().Select(); Console.WriteLine(q.Expression.ToString("Factory methods", "C#")); там кстати видно как инитятся свойства MemberInit( New( typeof(Doc).GetConstructor(new Type[] { }) ), Bind( typeof(Doc).GetProperty("Id"), MakeMemberAccess(x, typeof(Doc).GetProperty("Id") ) ) )
@tatyanamironova1462
@tatyanamironova1462 Жыл бұрын
👍👍👍
@an2an96
@an2an96 Жыл бұрын
Друже, во-первых спасибо за контент. Ровно год назад готовился по твоим стримам, на ровне с Рихтером, к собеседованию в озон (кстати, успешно). Во-вторых, сочувствую за то, что вам приходится переживать, в надежде на скорее прекращение конфликта. Понимаю, что не могу ни коим образом на этом настаивать, но очень бы хотел чтобы канал оставался на русском, это уникальный формат и объем информации на родном языке.
@sueta8526
@sueta8526 Жыл бұрын
Не можешь сказать, что на собесе спрашивали в основном? Что нить интересное, или базу? За год много поменялось? Просто любопытно :D. Сам джун с небольшим unity-wpf-ным опытом, осваиваю бэк. Готовлюсь к собесам тож.
@DevJungles
@DevJungles Жыл бұрын
Год назад как раз сделал пару стримов по CLR под копотом тогда
@an2an96
@an2an96 Жыл бұрын
​@@sueta8526 В основном были вопросы по многопоточности, асинхронности, архитектурные вопросы (в основном вокруг микросервисов). сборщик мусора (из интересного узнал тогда про LOH (Large Object Heap) - куча больших объектов). пара задач на покодить в лайве (в основном тоже вокруг паралеллизма и асинхронности все крутилось)
@user-uf5bq7kb3i
@user-uf5bq7kb3i Жыл бұрын
@@an2an96 Слушай, а у тебя рассматривали твои репозитории и что показывал из пет-проектов? Хочется узнать, чего ожидают (или даже желают) увидеть среди личных проектов собесудемого кандидата?
@an2an96
@an2an96 Жыл бұрын
@@user-uf5bq7kb3i не заходило речи о пет проектах и репозиториях. Если честно не помню чтобы вообще когда то это спрашивали, но собеседования были на мидла+, если ищите джуновые или даже интерн позиции, то вполне возможно что это может быть актуально и интересно
@kl45gp
@kl45gp Жыл бұрын
вот не хватает менее углубленного видоса, просто с подробным рассказом в твоем стиле как работает EF
@DevJungles
@DevJungles Жыл бұрын
Может дойду: тогда было очень интересно с нуля сделать и рассказать)
@an2an96
@an2an96 Жыл бұрын
А еще пользуясь случаем задам экспертный вопрос по ЕФ, раз уж тема стрима так ловко перекликнулась с проблемой в которую уперся. Можно ли как-то сконфигурировать сущность так, чтоб свойство вложенного объекта (сконфигурированого как OwnsOne) использовалось в качестве foreign key в связи one-to-many, при том, что навигейшен лежит именно в корневом объекте, а не во вложенном? При создании миграции ругается, мол не может экспрешен вида .HasForeignKey(x => x.IssuerId.Value); разобрать, что меня немного удивляет
@DevJungles
@DevJungles Жыл бұрын
К сожалению, не сталкивался с таким, потому не очень знаю(
@an2an96
@an2an96 Жыл бұрын
@@DevJungles вообщем, если интересно, такой кейс не поддерживается еф:(
@user-cb3bs1rv6y
@user-cb3bs1rv6y 5 ай бұрын
Привет, я из России. Отличный стрим. Очень жаль, что история сложилась так, что наши страны воюют. Всё из-за конченных правительств. Всем сердцем желаю, чтобы это всё закончилось и всё вернулось на круги своя, хотя понимаю, что этого уже скорее всего не будет. Пусть у тебя всё будет хорошо!
@n0rison
@n0rison Жыл бұрын
У нас на роботі даппер та усе через хранімки, тому самого sql в коді немає. А хранімки і бази розробляємо через sqlproj
@DevJungles
@DevJungles Жыл бұрын
Норм варіант)
@ei9896
@ei9896 Жыл бұрын
C# и Python идут навстречу друг другу 16:56
@DevJungles
@DevJungles Жыл бұрын
Чего? Не понял
@andyash3337
@andyash3337 Жыл бұрын
А билеты (на стендап) были на выступление Славы Комиссаренко :(((
@DevJungles
@DevJungles Жыл бұрын
Ага...
@andyash3337
@andyash3337 Жыл бұрын
@@DevJungles Та же фигня :(((
@clutchmeisteryo9831
@clutchmeisteryo9831 Жыл бұрын
В видео есть про создание таблиц и отношений в runtime?
@DevJungles
@DevJungles Жыл бұрын
Нет, эту тему обошли стороной. Маппили ответ от СУБД на модели, транслировали Expressions в SQL и много чего вокруг этого.
@clutchmeisteryo9831
@clutchmeisteryo9831 Жыл бұрын
​@@DevJungles Спасибо, и спасибо тебе за контент, делаешь классные вещи! По поводу вопроса, EF вообще способен на это? Есть ли более правильные подходы? В 2 словах делаю crm, нужно чтобы пользователь помимо встроенных мог создавать разделы с нужными полями будь то примитивы или ссылки на другие объекты. Удалось сделать универсальный контроллер для крудов с любой сущностью, а вот как таблички и связи создавать пока затык.
@DevJungles
@DevJungles Жыл бұрын
Я уверен, что такое можно сделать, но мне кажется тут бы подошёл EPV подход - каждая строчка в одной большой таблице описывает значение одного свойства одной сущности.
@crab4309
@crab4309 2 ай бұрын
Понимаю, что не хочешь продолжать блог на русском, не думал насчет английского? у тебя хороший контен,т было бы здорово, если бы он распространялся дальше
@DeadRabbitCanDance
@DeadRabbitCanDance Жыл бұрын
Мне непонятно в чем преимущество ORM по сравнению с SQL запросами. SQL запрос понятен, может быть любой сложности, в нем органично описываются разные джойны и всё это легко проверяется, сами запросы можно легко проверять вне приложения, в случаях динамического формирования запросов - опять же запросы к SQL базе сами по себе можно логировать, тестировать и т.д.
@aokijikuzan2131
@aokijikuzan2131 Жыл бұрын
Как минимум одна из причин в том что более менее сложный SQL запрос нифига непонятен. Они громоздкие, нужно знать структуру связи таблиц и прочий геморрой. ORM мало того что показывает прямо в коде что с чем связано, так и даёт удобнейший API с которым за минуты можно вытащить что тебе надо.
@antibioticknone3057
@antibioticknone3057 Жыл бұрын
В идеальном мире ORM абстаргириует от конкретной базы данных. Один и тот же код с использованием ORM будет работать и с SQL Server и с MSSQL и с MongoDB
@DevJungles
@DevJungles Жыл бұрын
Вопрос точно дискуссионный) На простых проектах получается абстрагироваться от конкретной БД и ее замена не влечет изменений в кодовой базе: поменял коннекшн стринг и все полетело. На больших так уже не выходит. С SQL в коде приложения есть вопрос: как его хранить в кодовой базе? Ввиде строк в си шарпе... Часто неудобно. Ну и наконец: результаты запросов нужно мапить на объекты в любом случае. Делать это руками не особо удобно. И тут приходит на помощь тот же даппер. Есть ещё вопрос передачи параметров в запросы.... Тоже создает тот ещё головняк, если делать руками.
@noto.verclocker
@noto.verclocker 5 ай бұрын
И тут немецко-американские постановки! Сколько можно!
@DevJungles
@DevJungles 5 ай бұрын
?
@baxram97
@baxram97 Жыл бұрын
Можете сделать видео про Thread Pool (Пул потоков) на C#? Просто ничего умного не нашёл на Ютубе. Буду очень благодарен. Просто я щас прохожу системное программирование и это действительно сложная тема, плюс в интернете нормального ничего нет по этой теме на C#. Да, есть разделы по потокам и т.д. Но последовательного какого-го курса нигде нет. А про пул потоков вообще промолчу...
@enderhexfyreeve1900
@enderhexfyreeve1900 Жыл бұрын
вроде что-то про тредпул в рамках ролика про многопоточку говорилось. или интересует сам алгоритм реализации тредпулов?
@DevJungles
@DevJungles Жыл бұрын
Запишу себе в список)
@ebaysher572
@ebaysher572 Жыл бұрын
@@DevJungles полность согласен, пожалуйста!
@enderhexfyreeve1900
@enderhexfyreeve1900 Жыл бұрын
@@DevJungles тогда может в рамках урока раскажешь о способах отладки многопоточного кода и поиска нестабильных багов типа райскондишн или неатомарных операции и прочего.
@DevJungles
@DevJungles Жыл бұрын
Стрим/видео по трюкам по отладке в списке)
@yb4371
@yb4371 Жыл бұрын
Iron Maiden!👹
@DevJungles
@DevJungles Жыл бұрын
Дадада!))) Всегда тащился по старому хард энд хеви, знал некоторые песни iron maiden, видел записи пары концертов, но не проникался. Но где-то прошлым летом внезапно прямо очень проникся!
@independentexpert8349
@independentexpert8349 Жыл бұрын
без таймлайна 3-х годинний стрім важко буде осилити
@DevJungles
@DevJungles Жыл бұрын
Відправлю кружку по Україні свого тайного закритого проекту за таймкоди)
@ibragimProtopopov
@ibragimProtopopov Жыл бұрын
Было бы круто еще иметь рубрику попроще без разбора исходников, что-нибудь по паттернам, бестпрактис, лайфхаки какие-нибудь, полезные либы и где они могут облегчить жизнь)
@DevJungles
@DevJungles Жыл бұрын
В планах есть видео как раз про трюки по отладке)
@LilPozzer
@LilPozzer Жыл бұрын
Одесса. Вчера дом моего друга разнесло в щепки.
@DevJungles
@DevJungles Жыл бұрын
Да((( Друг жив?
@LilPozzer
@LilPozzer Жыл бұрын
@@DevJungles да все слава богу окей
@zopPes
@zopPes Жыл бұрын
Я из России. Украинского совсем не знаю. Но если ты начнёшь выпускать видео на украинском, то и я его выучу.
@DevJungles
@DevJungles Жыл бұрын
Круто! Спасибо. Это прямо приятно осознавать)
@user-ie7eb9pl3n
@user-ie7eb9pl3n 5 ай бұрын
Куколд
@kandreyk9159
@kandreyk9159 Жыл бұрын
на Украине с каждым годом становится только хуже, сейчас страна вообще превратилась в концлагерь по воле киевских властей и никто не может знать, чем все закончится. Поэтому не очень умно утверждать, что будет в течении 30-50 лет и что РФ и Украина никогда не наладят отношения. Немцы убили миллионы украинцев в коцлагерях, но теперь Берлин и Киев лучшие друзья.
@DevJungles
@DevJungles Жыл бұрын
1. Средние ЗП росли быстрее инфляции с 2014го до 2022го и значительно обогнали инфлцию и уровень 2013го года. Очень многие стали ездить на выходные в Европу, появилось куча дешевих рейсов. Это не был взрывной и потрясающий рост. У нас множество проблем, но в промежуток с 2014го по 2022й мы проделали значительный путь, если оборачиваться назад. Я живя в Харькове(большой город) и регулярно ездя в Старобельск(совсем небольшой город) видел прогресс и там и там. 2. На улучшение отношений с Германией ушло точно больше 30 лет. У нас и сейчас есть много недовольства в отношении политики Берлина, но это и правда уже никак не связано с лагерями. Хорошей идеей будет оценить что они для этого сделали и можно будет увидеть большой путь, который проделала Германия со времен второй мировой. Я буду рад, если Россия пройдет такой же путь: покинет все захваченные территории, начнет выплату репараций, выдаст военных преступников, признает текущий режим и множество людей к нему причастных виновными в развязывании агрессивной войны и изменит курс куда-то в сторону интеграции в мир в правовом, экономическом и ценностном плане, то думаю 60ти летний я не буду относится плохо к 20ти летним русским гражданам.
@kandreyk9159
@kandreyk9159 Жыл бұрын
@@DevJungles "покинет все захваченные территории, начнет выплату репараций, выдаст военных преступников" >>> проще говоря, капитулирует. Не очень верится, но, время покажет. И опять же, США убили во Вьетнаме больше 1 млн вьетнамцев, сами потеряли десятки тысяч, но я вот не могу себе представить, чтобы после того, как штаты вышли из Вьетнама, они бы выдали своего президента и американских генералов, как военных преступников и начали выплачивать кому бы то ни было репарации
黑天使遇到什么了?#short #angel #clown
00:34
Super Beauty team
Рет қаралды 47 МЛН
Yum 😋 cotton candy 🍭
00:18
Nadir Show
Рет қаралды 7 МЛН
女孩妒忌小丑女? #小丑#shorts
00:34
好人小丑
Рет қаралды 83 МЛН
Middle/Strong Junior .NET Developer Job Interview
1:47:10
Dev Jungles - Andrii Podkolzin
Рет қаралды 10 М.
Почему я не использую Entity Framework
30:19
Програмысли Влог
Рет қаралды 10 М.
13. Что такое ORM? Почему стоит использовать ORM? Базы данных
1:26:06
Институт программных систем I Йошкар-Ола
Рет қаралды 3,4 М.
ТОП 10 технологічних ідей, що змінили розробку
29:21
Dev Jungles - Andrii Podkolzin
Рет қаралды 2,3 М.
ЧТО ТАКОЕ ENTITY FRAMEWORK?
20:21
АйтишныйДомосед
Рет қаралды 17 М.
Про Kafka (основы)
49:23
Владимир Богдановский
Рет қаралды 389 М.
黑天使遇到什么了?#short #angel #clown
00:34
Super Beauty team
Рет қаралды 47 МЛН