Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 21.08.2020
Сообщений: 31

Инфраструктура Entity framework

20.01.2023, 13:11. Показов 998. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я не совсем пойму инфраструктуру Entity Framework и её взаимодействие с Asp.net. Есть конкретная установка определённого контекста в ioc контейнер с инициализацией опции этого контекста.

C#
1
builder.Services.AddDbContext<SchoolContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
Почему при инициализации я не указываю конкретный интерфейс для этого di. Какой за ним интерфейс стоит?(IDbContextDependencies?)


В то же время мы определяем наш контекст. Я понять не могу кто вообще создаёт экземпляр нашего контекста, как в конструктор нашего контекста попадает уже какой-то готовый объект options(он ведь туда попадает?), аналогично как в modelBuilder попадает наш готовый объект(ModelBuilder). Я ведь не создавал эти объекты, я лишь только прописал какую-то логику.

Как установке сервиса AddDbContext<SchoolContext> и её опции вообще влияет на сущность SchoolContext. В этом классе же нету зависимостей как таковых, как мы допустим устанавливаем user сервисы и получаем их в контроллерах через инициализацию private переменной в конструкторе(как один из возможных вариантов).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public class SchoolContext:DbContext
    {
        public SchoolContext(DbContextOptions<SchoolContext> options):base(options)
        {
            
        }
 
        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Student> Students { get; set; }
 
 
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Course>().ToTable("Course");
            modelBuilder.Entity<Enrollment>().ToTable("Enrollment");
            modelBuilder.Entity<Student>().ToTable("Student");
        }
    }
Всё стало покрыто каким-то мраком, абстракциями, абстракциями, абстракциями. И везде в статьях, в книгах, в доке, описано, что "делать нужно так". А как же детали внутренней реализации?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2023, 13:11
Ответы с готовыми решениями:

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Entity Framework 6
Нарисовалась неожиданная проблемка. Штудирую Троелсена, там описание Framework 4, у меня 6-я версия. Один из примеров пришлось...

8
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
20.01.2023, 13:47
Цитата Сообщение от pipen Посмотреть сообщение
А как же детали внутренней реализации?
dotnet / efcore
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
21.01.2023, 05:47
Цитата Сообщение от pipen Посмотреть сообщение
Почему при инициализации я не указываю конкретный интерфейс для этого di. Какой за ним интерфейс стоит?(IDbContextDependencies?)
Потому, что вы указываете конкретную реализацию. На неё IoC-контейнер и завяжется.

Цитата Сообщение от pipen Посмотреть сообщение
Я понять не могу кто вообще создаёт экземпляр нашего контекста
IoC-контейнер, кто ещё?

Цитата Сообщение от pipen Посмотреть сообщение
как в конструктор нашего контекста попадает уже какой-то готовый объект options(он ведь туда попадает?)
IoC-контейнер вставит. Он ведь посмотрит что классу контекста нужно. А AddDbContext как раз и регистрирует сервис DbContextOptions<T> в IoC-контейнере, а вы этот сервис руками настраиваете (options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))).

Цитата Сообщение от pipen Посмотреть сообщение
аналогично как в modelBuilder попадает наш готовый объект(ModelBuilder). Я ведь не создавал эти объекты, я лишь только прописал какую-то логику.
Это же, блин, виртуальный метод. Его сам DbContext вызывает в определённый момент. Почитайте учебник по C#.

Цитата Сообщение от pipen Посмотреть сообщение
Как установке сервиса AddDbContext<SchoolContext> и её опции вообще влияет на сущность SchoolContext.
Установка сервиса регистрирует в IoC ваш контекст, а так же необходимые ему настройки.

Цитата Сообщение от pipen Посмотреть сообщение
В этом классе же нету зависимостей как таковых, как мы допустим устанавливаем user сервисы и получаем их в контроллерах через инициализацию private переменной в конструкторе(как один из возможных вариантов).
Чо?

Цитата Сообщение от pipen Посмотреть сообщение
Всё стало покрыто каким-то мраком, абстракциями, абстракциями, абстракциями. И везде в статьях, в книгах, в доке, описано, что "делать нужно так". А как же детали внутренней реализации?
Все озвученные выше вопросы к EF Core отношения не имеют. Судя по всему, вы совершенно не понимаете что есть Dependency Injection и Inversion of Control. Оттуда и "мрак". А вопрос про OnModelCreating это вообще основы C#.

Откройте для себя классную книгу Симан, Дерсен: Внедрение зависимостей на платформе .NET


Сам читал и всем рекомендую.
1
21.01.2023, 21:02

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
Сам читал и всем рекомендую.
Х.се )) 3,2к рублей ))

0
22.01.2023, 05:37

Не по теме:

wizard41, техническая литература дорогая. Особенно сейчас. Но оно того стоит. Да и всегда есть возможность купить со скидкой в 100% на соответствующих сайтах.

0
1 / 1 / 0
Регистрация: 29.07.2022
Сообщений: 11
22.01.2023, 14:41
https://vk.com/wall-18822808_20007
0
1 / 1 / 0
Регистрация: 21.08.2020
Сообщений: 31
23.01.2023, 23:40  [ТС]
Usaga, про виртуальный метод вы не поняли контекста. Суть вопроса была, как создаётся объект производного класса(производного контроллера), не зная что это за класс в принципе на момент компиляции(?). Это что за процесс самостоятельного вызова на объекте производного класса метода, предварительно создав это объект, это какой-то парсинг всевозможных производных классов базового, и создание и передача готового modelBuilder, либо это рефлексия в рантайме. Вы мне выкатили объяснение, про переопределение виртуального метода, спасибо). Я тут хотел понять как фреймворк сам создаёт, вызывает и передаёт готовые объекты и как написать похожую конструкцию без явного кодирования этого, создание объектов и вызова на нём метода, то чем собственно и занимается фреймворк.

Добавлено через 3 минуты
Usaga, про книгу отдельное спасибо) будем разбираться, только начал глубокое изучение asp, поэтому и с di столкнулся на практике только недавно.
0
HF
 Аватар для HF
1317 / 896 / 200
Регистрация: 09.09.2011
Сообщений: 2,692
Записей в блоге: 2
24.01.2023, 01:27
Цитата Сообщение от pipen Посмотреть сообщение
уть вопроса была, как создаётся объект производного класса(производного контроллера), не зная что это за класс в принципе на момент компиляции(?).
В сути вопроса был конкретный AddDbContext, а не производный, и не контроллер.

EntityFrameworkServiceCollectionExtensions.AddDbContext Метод не так прост. И как уже вам объяснял Usaga, часть параметров вы "руками" настраиваете. А виртуальные сами по себе вызываются когда нужно.

Цитата Сообщение от pipen Посмотреть сообщение
Я тут хотел понять как фреймворк сам создаёт, вызывает и передаёт готовые объекты и как написать похожую конструкцию без явного кодирования этого, создание объектов и вызова на нём метода, то чем собственно и занимается фреймворк.
Если вы хотите понять как работает DI - читайте книгу и гуглите что-то типа "custom dependency injection resolver". Вкратце - он создаёт граф зависимостей и потом по цепочке создаёт объекты нужные для каждого другого класса.

Цитата Сообщение от pipen Посмотреть сообщение
Это что за процесс самостоятельного вызова на объекте производного класса метода, предварительно создав это объект, это какой-то парсинг всевозможных производных классов базового, и создание и передача готового modelBuilder, либо это рефлексия в рантайме.
Вот тут вы и намешали вопрос. Если про DbContext, то Usaga ответил. А если про обычные классы - то какой это "парсинг всевозможных производных классов базового"? Для резолва используется рефлексия, собираются типы, создаются по ним объекты. В рантайме.

Книжку читайте дальше. Прочтёте, возвращайтесь с конкретными вопросами.
0
1 / 1 / 0
Регистрация: 21.08.2020
Сообщений: 31
24.01.2023, 09:48  [ТС]
понял. всем спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2023, 09:48
Помогаю со студенческими работами здесь

Entity framework One vs Zero-or-One
При настройке ассоциаций между двумя сущностями можно выбрать чтобы на конце связь была &quot;один&quot; и &quot;ноль или один&quot;-не...

Entity Framework

Entity Framework
Здравствуйте, пока только начал работать с C# WPF и EF. Возникла такая проблема, я создал базу в MS Sql. Создал модель EF по готовой базе...

Entity Framework. Связь 1 к 1
Привет всем Имею два класса: public class EntityA { public Guid Id { get; set; } } public class EntityB {

using hierarchyid in entity framework
Всвязи с тем что текущая версия Entity Framework (4.1) не поддерживает hierarchyid, так как данный тип не стандартизован, хочу предложить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru