Взаимодействие с базами данных через Entity Framework Code First Поддержи развитие канала! money.yandex.ru/to/4100139057... Qiwi Wallet +79534684569 Группа ВКонтакте: easycomp
Пікірлер: 91
@user-zq5dz5yx9s6 жыл бұрын
Чувак, вернись, таких уроков по С# больше нет на русскоязычном ютубе
@trismegistus96025 жыл бұрын
уже 2019, а я все еще жду новых уроков( Возвращайся, ты нам нужен
@p4cific_official3 жыл бұрын
шёл 2021 год... Хатико еще здесь...
@k..2 жыл бұрын
:/
@blackbarry7730 Жыл бұрын
@@k.. 2023:)
@user-yt4oi3oz1e7 жыл бұрын
Жалко, что на самом интересном месте остановился выпуск уроков. Бесценный материал.
@felixromanchenko33308 жыл бұрын
Крайне благодарен за Ваши уроки, продолжайте в том же духе) Ничего лишнего, приятная речь, доступное объяснение)
@dmitrij347 жыл бұрын
Мы вас заждались(. Возвращайтесь пожалуйста(
@alexanderpotashev19278 жыл бұрын
С миграциями связан очень слабо и не понимал их принцип действия. После этого урока все уложилось в голове аккуратно и красиво. Очень большая просьба не останавливать развитие канала и создание уроков по C#!
@rvrby25417 жыл бұрын
Спасибо за то, что выпустили, надеемся увидеть еще уроки.
@den3v6 жыл бұрын
Игорь делает неимоверную работу. Ни одного дизлайка!!! Такого соотношения почти ни у кого нет!
@user-zr3fj8qz3c6 жыл бұрын
Мы всё ещё ждём продолжение)
@biosvova5 жыл бұрын
Здравствуйте, не бросайте дело, продолжайте, жду вторую часть!!!
@bohgdanlion45218 жыл бұрын
Спасибо, отличный подход. С нетерпением жду следующей части.
@leore10163 жыл бұрын
Спасибо! Пишите больше уроков, логично и лаконично все показываете, все уроки просмотренные доступны для понимания!
@levlevin88585 жыл бұрын
Всем привет! Отличные уроки, ждем продолжения.
@NeverGTI7 жыл бұрын
Отлично преподнесли материал для новичков. Спасибо.
@MrDudeNudem4 жыл бұрын
Организуй сбор средств на уроки! Уверен, многие поддержат. Уроки реально классные!
@mikhailkh85608 жыл бұрын
Перевел деньги на развитие канала. Спасибо большое за уроки! С уважением, Михаил.
@user-ct8zg9vt9r7 жыл бұрын
Спасибо за видеоурок! все очень качественно и подробно объясняется.
@kirillbezmaternykh20126 жыл бұрын
Спасибо за уроки, очень просим продолжение)
@yar4ick8 жыл бұрын
Урок отличный! Ответил на многие мои вопросы!
@romanromanov44658 жыл бұрын
Спасибо! Очень доходчиво и по сути.
@alexanderchelyadinov6047 жыл бұрын
Спасибо большое вам, вы первый на кого я счел должным подписаться!)
@r5_d56 жыл бұрын
Ждем продолжения!!
@Inquisitor_ss8 жыл бұрын
Большое спасибо что вновь затронули тему Entity Framework. Это очень интересная и полезная тема. И при просмотре данного урока у меня возник вопрос. А как именно (какой командой) можно откатить состояние базы данных на нужное?
@dzmitrykuhukou44802 жыл бұрын
И все еще ждем)
@olehyastrebov78035 жыл бұрын
Обалдеть) И правда лучший и понятнейший видео-урок. Эх, жаль, что единственный..
@user-zo5tt6pd5y8 жыл бұрын
Большое спасибо за уроки и правильный русский язык. Продолжайте в том же духе. Ни где не встречал курса по разработке реального приложения- одни учебные. Может у вас получиться создать такой курс, талант преподавателя у вас есть. Одно замечание - темп речи очень быстрый, желательно на сложных местах помедленнее.
@user-oo7sz8vn2g5 жыл бұрын
Спасибо ! Отличный урок !!!
@hardkovalchuk8 жыл бұрын
Очень актуально. Спасибо большое
@1cBoris5 жыл бұрын
Это был шикарный урок, вот бы продолжение его вышло
@Gera.Kakogo-Hera2 жыл бұрын
Ох#енно. Быстро, качественно,, недорого
@denyszorin86758 жыл бұрын
люблю такой подход )
@user-uv5qy3lq3i6 жыл бұрын
Продолжайте!!!
@sergepikovsky33858 жыл бұрын
CodeFirst Approach. 1. Создаем консольное приложение. 2. Создаем в нем папку "DataModel". 3. Добавляем модель ПКМ на папке DataModel -> Add -> New Item... -> (уже в визарде) Data -> ADO .NET Entity Data Model (на этом шаге обзываем модель понятно - LibraryContext [т.к. это и имя класса наследника DbContext]) -> -> Entity Code First Model -> Finish. 4. Комментарии в классе LibraryContext удаляем. 5. Базовый конструктор DbContext требует строку подключения либо ключ из App.config, отвечающий за неё. По умолчанию сервер для БД есть: data source=(LocalDb)\v11.0; По умолчанию название БД есть: initial catalog=Library.DataModel.LibraryContext; В уроке сервер переключается (я этого делать не стал) : data source=.\MSSQLEXPRESS; //это полноценный экземпляр в противовес локальному. A название БД (я это тоже сделал) : initial catalog=LibraryDb; 6. Открываем MS SQL Server Management Studio и пока нашей базы там не видно, что естественно. 7. Создаем сущность: DataModel -> Add -> Class... (называем "Book"). Добавляем ему свойств ключа, названия и автора. 8. Извещаем контекст о новой сущности, а именно: создаем в нем свойство "public DbSet Books { get; set; }" 9. Все готово, чтобы записать в БД сведение о какой то книге, что и делаем в методе Main: а) оборачиваем в using создание контекста. б) создаем и инициализируем инстанс класса Book. в) добавляем ссылку на вновь созданный инстанс к свойству контекста Books. г) сохраняем на контексте изменения. 10. Для создания БД достаточно просто запустить приложение на выполнение. Делаем это. Кроме Book в LibraryDb (которую мы сразу обнаружили в MS SQL Server Management Studio) есть еще и таблица __MigrationHistory (о ней позднее). Запись о книге в таблицу Book внесена. Запись же в таблице __MigrationHistory выглядит так (сокращенно): MigrationId ContextKey Model ProductVersion 201603281548448_InitialCreate Library.DataModel.LibraryContext 0x1F8B08000000000 6.1.1-30610 11. Добавляем в таблицу Book свойство ISBN. 12. Меняем код метода Main, что бы при следующем запуске и создании еще одной записи о книге заполнялось и поле ISBN. 13. Запускаем приложение и получаем ошибку, в описании к которой говорится, что в модели были изменения после того как БД была создана. И что-то про миграции... Миграции - очень мощный инструмент EF при Code First, они позволяют вести историю изменений БД в коде. По сути любые изменения в БД при Code First проходят через миграции. Чтобы запустить механизм миграций нам необходимо перейти в "Console Package Manager". Выбираем выпадающем списке "DefaultProject:" наш проект Library. После этого ввести команду Enable-Migrations и нажать Enter. Если все нормально то увидим строки, последняя из которых будет: "Code First Migrations enabled for project Library.", и появляется папка Migrations в которой будет 2 файла: - Configuration.cs (в нем идет настройка доступа к нашей БД, а также метод Seed, о котором позже) - 201603281548448_InitialCreate.cs (Название файла класса меняется от даты, цифры и прочее в названии класса совпадают с цифрами в столбике MigrationId таблицы __MigrationHistory). Это и есть наша миграция. Миграция описывает те действия, которые мы осуществляем в нашей БД. Наша первая миграция является инициирующей. Она создана на основе той записи в БД, которую мы видели. И так, у нас появился класс начальной миграции, соответствующий по названию первой записи в таблице __MigrationHistory поля MigrationId. Он содержит в себе описание БД на момент ее создания (одна таблица Books с тремя полями). Однако с момента создания БД мы в модели добавили еще одно поле ISBN. И этот факт необходимо в миграции отразить. Иначе будет несоответствии модели и БД. 14. Добавление миграции производим в Console Package Manager командой "Add-Migration ISBN" (где "ISBN" - информационная составляющая [по названию добавленного поля] для собственного удобства и может быть заменена на более удобную. После нажатия Enter произойдет сканирование нашей модели данных, выявляются отличия с последней миграцией и эта разница записывается в новую миграцию. У нас появляется новый класс имя которого мы указали при добавлении миграции и в нем мы можем видеть свои действия по добавлению столбца в таблицу. 15. Теперь у нас есть: - измененная модель данных (в папке DataModel); - соответствующая изменениям миграция (201603281805124_ISBN.cs). Осталось применить эту миграцию к БД. Команда Update-Database в Console Package Manager обновит БД. Убеждаемся, для понимания, что в БД, а именно в таблице __MigrationHistory, новых записей пока не появилось, и, выполняем Update-Database. В таблице __MigrationHistory появляется вторая запись, а в таблице Book - новый, заданный нами в модели столбец ISBN. 16. Таким образом, механизм миграций является очень хорошим инструментом для того, чтобы откатить состояние БД на любую точку, в которой зафиксированы миграции, либо наоборот, обновить БД до любой точки. Если встает вопрос обновление клиенской БД у многих клиентов, то с помощью механизма миграций этот вопрос решается крайне просто. 17. Теперь рассмотрим вопрос о мутации данных. Глядя на таблицу Book, видим, что поля не оптимально спроектированы. Поля Title и Author - слишком большой длинны и Title не может, на самом деле быть равен null. Для того, чтобы это исправить мы должны воспользоваться механизмом мутации данных. 18. Переходим в класс Book и указываем атрибутами [MaxLength(1000)] желаемую длину в знаках (в примере 1000 знаков). Для этого подключаем пространство имен System.ComponentModel.DataAnnotations. Атрибутом [Required] декорируем обязательные поля. 19. Внесенные изменения оформляем через добавление еще одной миграции "Add-Migration DataAnnotations". Создается миграция 201603282313277_DataAnnotations.cs по которой легко понять что же меняется в БД. Применяем Update-Database в Console Package Manager для обновления БД. 20. Запускаем код на выполнение и убеждаемся в том, что новая книга добавилась: BookId Title Author ISBN 1 Война и мир Лев Толстой NULL 2 Анна Каренина Лев Толстой 5-05-000746-1 21. Вопрос: Почему столбец BookId стал ключевым? - а потому, что работают соглашения по умолчанию, в соответствии с которыми, столбцы, названные прибавлением к названию таблицы суффикса Id - то EF по умолчанию делает его ключевым. Либо столбец называется "Id" - он тоже станет ключевым. Если мы хотим явно (а не по умолчанию) сделать столбец ключевым, мы можем использовать аннотацию [Key].
@anaredbeard60525 жыл бұрын
"Скоро выйдет вторая часть..." ))). Обещанного три года ждут. Может, в марте 2019 таки повезет? Вы молодец. Вернитесь к нам, пожалуйста ).
@likeme87914 жыл бұрын
Так уже январь 2020
@Zliun4 жыл бұрын
Всё ещё без уроков. Кто находил актуальные контакты Игоря?) Возможно сервис patreon поможет.Я могу отдавать рублей 500 в месяц на эти уроки, они шикарны. Со мной ещё человек 40 будет, я уверен.
@magazakaryan47333 жыл бұрын
2020год - я всё еще жду 2ой части ...
@user-vr8lk7fx4l7 жыл бұрын
хороший урок. спасибо
@ivanokulichev78348 жыл бұрын
Большое спасибо за уроки. Оносительно Code First, хотелось бы поподробнее про "n to n relationship", по возможности...
@laiser5458 жыл бұрын
Большое спасибо
@alexanderspiegel67474 жыл бұрын
Очень приятный стиль преподавания. Хочу поддержать донатом. Только хотелось бы понимать какие есть планы на будущее развитие канала. Большая просьба к автору прояснить ситуацию. С уважением!
@dmitriygolovachyov54938 жыл бұрын
Отличный урок, хотел узнать а fluent API будет в следующих уроках?
@TheCrow_94018 жыл бұрын
обидно что опять перестали выпускать ( на самом интересном=(
@seriga38 жыл бұрын
Автора можно понять. Кто-то заливает видео с контентом типа “котики” и получает просмотров сотнями тыс. Тут годы опыта, многие часы подготовки и в виде экстракта преподносится нам. К сожалению новоявленных программистов, или программистов самоучек для кого этот контент является золотым гораздо меньше.
@TheCrow_94018 жыл бұрын
+seriga3 да это понятно( но хотя бы просто написать что не успеваю(
@user-ct8zg9vt9r7 жыл бұрын
Ну... не согласен вообще. По такой логике не нужно выращивать на огороде еду или покупать молоко у бабушек, потому что все едят напичканные химией продукты, не нужно производить хлеб, потому что много людей едят фастфуды. Может кому то покажется странным такое сравнение, но информация это как еда для мозга и от её качества и количества зависит многое в жизни человека как и с физическим здоровьем. И тех кто выбирает фастфуды и химию в десятки раз больше чем тех кто кушает домашнее, то же и с котиками. А в итоге что ? Итог уже явно виден, достаточно посмотреть на кол-во болезней возросших в сотни раз, да таких, что ещё никогда в истории о таком не слышали и не знают как лечить и чем. К тому это все, что нужны люди, которые будут выдавать вот такие вот экстракты и пусть на канале будет 6000 в противовес 100000 котолюбителей, но это не 1 человек как можно было раньше с репетитором заниматься и не 30 как в школе и не 100 как с преподавателем в институтской аудитории, это 6000+ а автор сделал это видео только 1 раз и все, смотрят те кому это действительно нужно и получают от этого реальную пользу. Да и сам автор получает немало пользы от преподавания, ведь таким образом происходит систематизация его собственных знаний, так что даже если бы тут было 0 просмотров, автор бы уже ничего не потерял. Я думаю тут дело в другом, может быть просто надоедает одно и тоже и иногда человеку нужна смена деятельности, может быть автору нужно немного больше времени на то чтобы преподнести все качественно так как нужно, может быть вообще семья в конце концов и нету на это времени. Просто будем ждать и надеяться, что выйдут ещё уроки, потому что качественного не так много , а это реально качественно, за что и спасибо.
@hardkovalchuk8 жыл бұрын
Еще хотелось бы услышать о защите целостности БД в entity framework. Маловато информации об этом. Что будет если удалить объект на который ссылается внешний ключ, например как сделать on delete set null?
@user-ki4qb6xe2j7 жыл бұрын
Игорь, не давно нашел ссылку на ваши уроки здесь www.cyberforum.ru/csharp-beginners/thread1673551.html После этого просто их все просматривал, не отрываясь. Реально лучшее изложение материала, которое я встречал. Не знаю, почему вы не закончили урок по Code First программированию (видимо были свои причины). Но счел своим долгом просто поблагодарить за выложенный материал. Если будете продолжать, я обязательно поддержу развитие канала. Qiwi Wallet +79534684569 этот кошелек все еще ваш?)
@vanish144 жыл бұрын
Ля, чувак. Я думал что нашёл уже идеальное объяснения, но продолжение нет. Не надо так...
@sardd57963 жыл бұрын
Я поставил колокольчик. Жду, пока прозвенит
@user-im7jx6wo3t7 жыл бұрын
Доступно
@m0n038 жыл бұрын
Поскорее бы уже следующий урок по WPF
@13danyocean138 жыл бұрын
интересно, чем руководствуются в майкрософт, убирая database first?
@AntonZdornov7 жыл бұрын
Чувак крутт пройдитесь по лайкам ставьте поддерживайте
@zolotayaorda12264 жыл бұрын
Неплохой видеоурок, но не хватает пояснений, смотрела в скорости 0,25
@p.shpyro4 жыл бұрын
Что ж, думаю автор примет к сведению и исправит ошибку четырёхлетней давности)
@user-nv4yz5bt4g2 жыл бұрын
Чтобы сохранить массив или коллекцию мне нужно обязательно создавать базу данных или есть какой-то прием сохранения коллекции в файле ? Я пытался сохранить коллекцию в файле , но у меня сохраняется только один член коллекции .
@romazherdev8 жыл бұрын
Если я хочу использовать локальный экземпляр БД, то как сделать, чтобы он создавался в папке с проектом? Если connectionString не трогать, то по дефолту создается на диске C:\ в пользователях.
@user-rq6rf2xv4m8 жыл бұрын
Доброе утро:) Хотел сказать Вам СПАСИБО за Ваш канал. У меня есть вопрос почему когда я выбираю ADO.net Entity Data Model у меня нету Empty Code First Model и нету Code First DataBase. EntityFramework 6.1.3 установлен и NuGet.Tools тоже как сделать что бы эти модели появились? Заранее Спасибо:)
@nikitapochechuev52477 жыл бұрын
По поводу "миграций", предположим у меня была сущность "Человек/Person", доставшаяся "по наследству", с атрибутами Id, FirstName, LastName, BirthDate, GenderId, City, SSN, PassortNumber И тут выяснятся что оказывается это типа пациентов в больницах/поликлиника/... или ещё кто-то, а люди как водится меняют и фамилию и имя и "Паспортный пол" (от чего диагнозы и врачи зависят и не всем "женщинам по паспорту" можно поставить женский диагноз) и договора старые должны быть завязаны на старые документы и т. п. И выясняется что надо сделать Person - Id - BirthDate - BirthGender - SSN (Я надеюсь он не меняется если он есть) - FkCurrentPublisedData (обратная ссылка на дочернюю, текущее значение) - fkCurrentDocument - fkCty - только текущий город без истории (например), хотя история изменения адреса и разные типа адресов тоже может быть PublishedData - Id - fkPerson - fkPreviousPublishedData - FirstName - LastName Document - Id - PublishedData - number - startDate - previousDocument - fkType City - id - name А потом может быть ещё выясняется что и для имён/фамилий надо иметь что-то типа справочника что бы помогать вводу с подсказками и минимизировать вариант неправильного ввода ФИО бабушками-операторшами. Как этими "миграциями" разрулить всё это да ещё с сохранением данных, правильным созданием индексов, уникальный констрейнтов и т.д. При этом если хочется иметь "умный констрейнт" на уровне БД что бы любой клиент (может тот кто импортит данные или ещё что-то) и реализовать его триггером что бы добавление новыйх ФИО означала автоматическую установку их как текущих и ссылка на предыдущие ставилась бы автоматом (мало ли какой-то отдельный процесс или галимый SSIS папкет это делает). Как этими "миграциями" без головняка решается такая задача?
@alexxaker33186 жыл бұрын
А как осуществить изменение и удаление данных?
@JuiKoloshi5 жыл бұрын
Нужна помощь! Публикую mvc сайт (пусть например шаблон) из visual studio дома на iis сервере +mssql2012 express. Щас я прописываю строку подключения явно, но если я захочу опубликовать ее на каком то хостинге, где я понятия не имею об имеющейся субд, как мне это реализовать? Ответьте хотя бы в 2ух словах, остальное я нагуглю.
@mastermood19413 жыл бұрын
20.12.2020 Все еще жду вторую часть(((
@Yarkendar8 жыл бұрын
1) Поясните пожалуйста, в чем разница использования "using" при создании экземпляра класса контекста? Почему бы просто не создать экземпляр этого класса, без использования "using"? 2) Будут ли уроки по ASP.NET и в частности по ASP.NET Core ? P.S.: спасибо за информативный урок :)
@Defazze8 жыл бұрын
+Yarkendar 1. Потому что контекст данных - это неуправляемый ресурс (БД). Его необходимо явно уничтожать (вызывать метод Dispose), иначе будет утечка памяти. Выход за пределы директивы using как раз автоматически и вызывает Dispose. Чтобы ненароком не забыть 2. Пока в ближайших планах нет
@Yarkendar8 жыл бұрын
+Программирование - это просто, в каких еще случаях, кроме контекста БД, нужно использовать такую конструкцию?
@Defazze8 жыл бұрын
В тех случаях, когда создаваемый объект реализует интерфейс IDisposable
@kostiantynsemeniuk6828 жыл бұрын
+Yarkendar визде где нужно закрить соединение или очистить ресурси, для применра Stream и наследники. msdn.microsoft.com/ru-ru/library/yh598w02.aspx msdn.microsoft.com/ru-ru/library/system.io.streamreader(v=vs.110).aspx
@Margarita-nx8kd5 жыл бұрын
+1 а продолжения entity не будет? 😢
@armengishyan98447 жыл бұрын
есть второй часть не могу найти ???
@biosvova5 жыл бұрын
Будет ли продолжение?
@leonid84844 жыл бұрын
Скажите пожалуйста, а продолжение будет ?
@sviatoslav33478 жыл бұрын
А будут ли уроки по ASP.NET?
@Defazze8 жыл бұрын
Скорее всего нет
@ZerpicoBlog7 жыл бұрын
Лучше не надо. Это несколько другая область, Web-программирование. Мне нравится этот канал что здесь нет этого, лучше найди уроки сам уроки по ASP и web-программированию в целом.
@user-ni1qi5xl6y6 жыл бұрын
Программирование - это просто. Похоже, что уроков уже вообще не будет :(
@MrDudeNudem4 жыл бұрын
Вернись, доделай код ферст! Плиз! :)
@EdwardNorthwind4 жыл бұрын
не ну чо, давайте отменим поддержку.... -- А что делать людям, если им нужно написать ПО к уже существующей БД? -- Да плевать на них!
@ZnZ6 жыл бұрын
А можно как-то сделать что бы база лежала рядом с .exe, и работало у всех?
@Raven666Lich6 жыл бұрын
ну здесь зависит от того должны ли быть данные общедоступными, если база только для одного пользователя, то можно использовать sqlite, а если данные должны быть общедоступными то приложение должно подключаться к серверу БД
@yar4ick8 жыл бұрын
Я понимаю что Вы и так в последнее время делаете очень много работы для канала, но ужасно не хватает курса по ASP.NET MVC 5!
@antonvdovin81048 жыл бұрын
+Ярослав Петренко рано еще курсы пилить, сыроват он еще
@yar4ick8 жыл бұрын
Он 13го года как бы, где ж он сырой. Это скорей к MVC 6 относится
@user-dn2dm6tr7o5 жыл бұрын
Вернись,а то плакать буду
@user-ip7ox6vh1q4 жыл бұрын
А где 2 часть? очень надо
@cheguevara12607 жыл бұрын
Цитата: "ADO.NET производительнее Entity Framework ~ в 1.5 раза. Использование технологии LINQ еще снижают производительность. За удобство нужно платить." прокоментируйте пожлст
@ZerpicoBlog7 жыл бұрын
Потому что ADO.NET работает на прямую с БД. А EF создает слои, сущности, ссылки и прочее. И целиком обращается с БД по 10 раз всё проверив и синхронизировав. От того и скорость медленее. Но тут что тебе важнее удобства или скорость. Только вот работаю с например с базой где таблиц например 300, еще и куча процедур и представлений и т.п. То конечно в этом плане EF удобнее и оправданее. В остальном лучше ADO.NET. Ну это конечно моё мнение, выводы делай лучше сам, что для тебя и для какой задачи лучше
@sergpavlenko14033 жыл бұрын
Может мне ктото обьяснить нахер эти миграции нужны? Упростили жизнь..... я еще и изучать команды миграции должен вместо простого изменения базы данных.....