Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787

Как работает Entity Framework Core

02.09.2019, 09:56. Показов 2326. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! В веб проекте будет сканирование штрихкодов, как штрихкод сканируется, полученный код это номер заказа. Этот код далее пройдет проверку на существование такого кода в базе (т.е. существует ли такой номер заказа) и если все хорошо то в базу занесутся данные текущей даты.
В чем вопрос.
EF будет каждый раз нагружать базу при проверке? или закешированные данные при каждом обращении может как то изменяются? Т.е. перехожу я на страницу с заказами, у меня получается приходит таблица

C#
1
myDBContext.Customers
1. Теперь я нажимаю кнопку Отгрузить заказа
2. Выскакивает модальное окно, я сканирую штрихкод
3. Нажимаю на кнопку ОК и пошла проверка на существование такого заказа

EF теперь куда обратиться? к старому закешированному (допустим на момент первоначальной загрузки страницы заказ не был готов, прошла минута и заказ проштриховал кто то в цеху то что он готов)

C#
1
myDBContext.Customers
или EF отловит, что произошли изменения и
C#
1
myDBContext.Customers
надо обновить.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2019, 09:56
Ответы с готовыми решениями:

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

Как в Visual Studio подключить Entity Framework Core?
win 7x64 VS 2015 Создаю проект (см. скрин). Ввожу в консоль Nuget "Install-Package...

Entity Framework Core копирование данных
Ситуация такая, из одной бд, добавляю одно поле и записываю в другую бд. public class RepositoryShared : DbContext { ...

16
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 09:59
Цитата Сообщение от MaksimkaI Посмотреть сообщение
EF теперь куда обратиться?
А сами как думаете, куда EF за данными обращается?)

Цитата Сообщение от MaksimkaI Посмотреть сообщение
у меня получается приходит таблица
У вас "приходит" не таблица, а объект с помощью которого к этой таблице можно построить запрос. Никаких данных в этом объекте нет.

У EF'а есть кеш контекста, в котором сохраняются объекты после их выгрузги из базы или добавления туда. Но никакой поиск по нему не ведётся, только определение состояния объектов и для реализации паттерна Identity Map.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
02.09.2019, 10:04  [ТС]
Usaga, Я понимаю, что не силен в точных определениях. Я думаю смысл понятен).
Цитата Сообщение от Usaga Посмотреть сообщение
У EF'а есть кеш контекста, в котором сохраняются объекты после их выгрузги из базы или добавления туда. Но никакой поиск по нему не ведётся, только определение состояния объектов и для реализации паттерна Identity Map.
То есть поиск то ведется по физической базе?

Почему вообще возник вопрос работы EF, это потому что проект будет в первое время на моем рабочем ПК. Примерно 10 точек где штрихуют. Думаю какая нагрузка, В таблице заказов больше 4к строк
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.09.2019, 10:04
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Добрый день!
Здравствуйте!

Цитата Сообщение от MaksimkaI Посмотреть сообщение
Этот код далее пройдет проверку на существование такого кода в базе (т.е. существует ли такой номер заказа) и если все хорошо то в базу занесутся данные текущей даты.
Не забудьте пометить дату как Concurrency Token — на случай, если между проверкой и обновлением кто-то другой попытается сделать то же самое с тем же заказом.

Цитата Сообщение от MaksimkaI Посмотреть сообщение
EF будет каждый раз нагружать базу при проверке?
Зависит от метода доступа.
Если DbContext создается новый для каждой транзакции (как должно быть), то каждый раз будет запрос в базу.
Если контекст используется один и тот же, то метод Find будет искать в кэше, а Linq-методы фильтрации — в базе.
0
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 10:11
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Почему вообще возник вопрос работы EF, это потому что проект будет в первое время на моем рабочем ПК. Примерно 10 точек где штрихуют. Думаю какая нагрузка, В таблице заказов больше 4к строк
Добавление индекса по полю с кодом товара (который из штрих-кода приходит) сделает поиск практически моментальным. EF тут ни при чём.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от kolorotur Посмотреть сообщение
Не забудьте пометить дату как Concurrency Token — на случай, если между проверкой и обновлением кто-то другой попытается сделать то же самое с тем же заказом.
Я бы для этого завёл отдельное поле в базе. Если речь о SQL Server, то там уже и тип есть специальный - RowVersion\TimeStamp. Дата для такого момента не подходит, ибо её точность меньше требуемой, да и совсем одновременные даты вообще не исключены.

1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
02.09.2019, 10:14  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Добавление индекса по полю с кодом товара (который из штрих-кода приходит) сделает поиск практически моментальным. EF тут ни при чём
Можно более простыми словами?
0
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 10:15
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Можно более простыми словами?
В СУБД для колонок (как отдельных, так и групп) можно создавать специальную структуру данных - ИНДЕКС. Поиск по этой структуре очень быстрый даже, если в ней дохреналион данных.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
02.09.2019, 10:23  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
У EF'а есть кеш контекста, в котором сохраняются объекты после их выгрузги из базы или добавления туда. Но никакой поиск по нему не ведётся, только определение состояния объектов и для реализации паттерна Identity Map.
Вы говорите поиск по кешу не ведется я правильно понял?

Цитата Сообщение от kolorotur Посмотреть сообщение
Если контекст используется один и тот же, то метод Find будет искать в кэше, а Linq-методы фильтрации — в базе.
А тут поиск в кеше говорит)

Добавлено через 46 секунд
Допустим контекс используется один и тот же
0
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 10:38
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Вы говорите поиск по кешу не ведется я правильно понял?
Поиск в кеше идёт только по первичному ключу. Для реализации Identity Map.

Цитата Сообщение от MaksimkaI Посмотреть сообщение
А тут поиск в кеше говорит)
Тут однозначно сказано, что поиск в кеше только при вызове метода Find, которому передаётся первичный ключ. Поиск по другим полям идёт сразу в базе.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
02.09.2019, 10:46  [ТС]
Usaga, Че то я совсем запутался

1. Загружаю страницу
2. Приходит контекс моей таблицы
3. Нажимаю кнопку Отгрузить
4. сканирую код - получаю номер заказа
5. Ищу номер заказа ( то ли в закешированном контексте, то ли сразу в базе? При этом New контекст не создается.)

p.s. Номер заказа не совпадает с идентификатором строки. Id - первый столбец, Номер заказа следующий столбец.

Где у меня будет номер заказа искать?

Без научных определений пожалуйста.
0
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 10:46
Лучший ответ Сообщение было отмечено MaksimkaI как решение

Решение

Цитата Сообщение от MaksimkaI Посмотреть сообщение
Где у меня будет номер заказа искать?
В базе. Всегда.
1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
02.09.2019, 10:50  [ТС]
Usaga, Вот это кратко и ясно. Спасибо!

Добавлено через 2 минуты
И да придется думаю какую то таблицу отдельную делать с ссылкой на таблицу заказов. Где будет отмечаться Готовность заказа и т.д. на каком этапе находится.
0
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 10:51
MaksimkaI, это можно в самой таблице заказов держать, ибо напрямую к нему относится и неразделимо с заказом.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
02.09.2019, 12:32  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
это можно в самой таблице заказов держать, ибо напрямую к нему относится и неразделимо с заказом.
А если столбцов порядка 40-50 ничего? Само собой использоваться будет один-ко-многим или другой подход.
То есть основная таблица это заказ в ней будет (Id, Number, CustomerId, ModelDoorId, и т.д.) Это как раз один-ко-многим вроде как.
0
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 12:49
Цитата Сообщение от MaksimkaI Посмотреть сообщение
А если столбцов порядка 40-50 ничего?
Это значит, что у вас какая-то дичь в архитектуре базы.

Цитата Сообщение от MaksimkaI Посмотреть сообщение
Само собой использоваться будет один-ко-многим или другой подход.
Ну так это и реализуется полем в самой таблице заказов. В моём представлении, заказ не может существовать без статуса. Значит поле со статусом должно присутствовать в таблице заказов. Это может быть перечисление или внешний ключ на таблицу справочника со статусами. Но эта связь не должна быть во внешней таблице. В противном случае такая система допускает отсутствие статусов или множественное их существование для одного заказа. А это бред.
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
02.09.2019, 13:03  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это значит, что у вас какая-то дичь в архитектуре базы.
Ну так если все с сылками будет.
1 заказ это 1 дверь
У двери много номенклатур: замки(основной, дополнительный),накладки, ручки, панели, засовы, эксцентрики, причем цвета у фурнитуры надо указывать. Вот и набирается столько столбцов.

А если связи между таблицами соблюдать это все равно дичь?)
0
Эксперт .NET
 Аватар для Usaga
14096 / 9313 / 1349
Регистрация: 21.01.2016
Сообщений: 34,988
02.09.2019, 13:06
Цитата Сообщение от MaksimkaI Посмотреть сообщение
У двери много номенклатур: замки(основной, дополнительный),накладки, ручки, панели, засовы, эксцентрики, причем цвета у фурнитуры надо указывать. Вот и набирается столько столбцов.
Нет, не набирается. Есть концепция "номенклатура". Подразумевается, что всё выше перечисленное реализуется одной концепцией, в одной таблице. Значит нужны связи многие-ко-многим.

1. Таблица заказов
2. Таблицы номенклатуры (ручки, двери, засовы, всё остальное)
3. Таблица связей ЗаказНоменклатура

На каждую связь не новая колонка в таблице заказа, а новая запись в таблице ЗаказНоменклатура.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2019, 13:06
Помогаю со студенческими работами здесь

Достаточно ли знать только Entity Framework Core?
Достаточно ли знать только Entity Framework Core? Имеется ввиду, если не знал ADO.NET и Entity Framework, то можно ли изучать и...

Обращение к хранимым процедурам и функциям из Entity Framework Core
Вот сама БД CREATE DataBase CarLibrary GO USE CarLibrary GO CREATE TABLE Types

Entity Framework Core пропуск дублирующих значений при добавлении
В таблице бд несколько значений определены как уникальные, и при добавлении нового вылетает ошибка, думал так выйти из ситуации: ...

Не работает Entity Framework
Здравствуйте. Я новичек, решил изучить Entity Framework, делал первое приложение Code First по примеру. Класс User: public class...

Не работает Include() в Entity Framework
Подскажите. пожалуйста. В чём может быть причина, что никак к связям не подобраться? Необходим запрос, который включает в себя 2...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru