|
2 / 2 / 1
Регистрация: 09.02.2020
Сообщений: 477
|
|
Актуальность Entity Framework 626.08.2020, 01:34. Показов 7019. Ответов 71
Подскажите, пожалуйста, востребован ли сейчас Entity Farmework 6 или есть более удобные средства для работы с БД?
0
|
|
| 26.08.2020, 01:34 | |
|
Ответы с готовыми решениями:
71
Миграции в Entity Framework Вложенный запрос в entity framework Entity framework показ данных по частям |
|
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,461
|
|||
| 02.09.2020, 11:02 | |||
|
freeba, а в .NET Framework асинхронность не поддерживается? И причём тут асинхронность вообще? При использовании асинхронности, обращения к контексту идут только из одного потока, последовательно. Это не то, что вы нам рассказываете.
Добавлено через 1 минуту
1
|
|||
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
||||
| 02.09.2020, 11:10 | ||||
|
Добавлено через 2 минуты Да божешь мой. Неотличимы все(!) орм на малом количестве данных. Ну не идиоты же их разрабатывают, чтобы примитивным примером из 50 строчек им тыкали в нос и говорили - не ребят, это для крупных проектов ну никак не пойдет.
1
|
||||
|
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,461
|
|||||
| 02.09.2020, 11:24 | |||||
|
Добавлено через 3 минуты Вы хоть что-то из своих слов можете доказать? Добавлено через 9 минут
1
|
|||||
|
|
|
| 02.09.2020, 14:53 | |
|
Хотелось бы тоже вклиниться, но только чтобы заполнить некоторую недосказанность в ваших рассуждениях и своих знаниях одновременно.
![]() То что я пишу это моё понимание темы. И я нисколько не удивлюсь если где-то ошибся, и буду рад краткой информации в чём я не прав и как правильно. 1. Про ViewState. Мне кажется никто не упомянул DetectChanges. Не в курсе про контекст, но у меня всегда росли именно эти данные. Чем больше связей и изменений, тем больше "жесть" в памяти. Я даже не понимаю что там в контексте может вырасти. 2. Про мультипотоки. Помоему тут просто недопонимание или остутствие чёткого кода. Потому что да, проблемы всегда были, но нужно понимать их причину. Я сталкивался с очевидной ситуацией - блокировка конкретной сущности, которую я пытался в нескольких местах изменить. Ну это и понятно. Этот же DetectChanges и проверяет версионности. Но на картинке выше, например, я считаю что там ошибка вообще связана с созданием контекста. Он так и говорит что OnModelCreating. Или уж не знаю почему ошибка в создании? Он же не должен его создавать снова, а использовать существующий. 3. Лично для себя давно не могу решить проблему блокировки. Вы тут такие спецы собрались, и даже мимоходом затрагивали эту тему. Вопрос простой: как сделать блокировку, которую я бы смог сделать через SQL запрос с командой "SET TRANSACTION ISOLATION LEVEL" ? Разве EF транзакция это тоже самое? Помоему он умеет это только в своём контексте это делать. Ситуация простая: два клиента хотят изменить таблицу Users. Как мне заблокировать эту таблицу/запись? Если бы у меня был SP я бы написал команду (выше) и был бы уверен что паралельно никто не смог ничего писать. А в EF такого я не видел.
2
|
|
|
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,461
|
||||
| 02.09.2020, 16:13 | ||||
|
Change Tracking сильно влияет на производительность, если в кеше много сущностей. Это легко наблюдать во время массовой вставки данных, когда каждая последующая порция данных всё медленнее и медленнее уходит в базу. Второе может подкинуть свинью, когда вы забыли добавить к запросу Include, но связанная сущность всё равно появляется в вытаскиваемой, если она вытаскивалась чуть раньше, в рамках этого же контекста. Я на такое натыкался несколько раз. ![]() Обе беды лечатся использованием проекций, а не самих сущностей. А при массовой вставке данных нужно контекст выбрасывать и запрашивать новый после вставки сотни-другой записей. При этом, если одну из тасок закомментировать, то всё отрабатывает. Поэтому всякие заявления о том, что EF, якобы, может одним контекстом параллельно запросы выполнять - бред. Кто не верит, может сам проверить. И в коде контекста даже своими глазами посмотреть, что там ОДИН объект подключения. DbContext.Database.BeginTransaction() передаётся в ADO.NET при открытии подключения. А TransactionScope вообще висит в статической (но ThreadStatic) глобальной переменной, которую ADO.NET само аттачик, если там не null. А то, что вы имеете в виду (транзакция в SaveChanges) - так он просто обычную транзакцию создаёт перед исполением этого метода, а потом коммитит.А про блокировку таблицы\записи вопрос общий. Тут больше конкретики нужно. Либо вам оптимистичная блокировка, либо блокировка на уровне бизнес-логики.
1
|
||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 02.09.2020, 20:20 | ||
|
Сервер сам прекрасно умеет блокировать что нужно и как нужно. Встревать в этот механизм нужно в крайних случаях и крайне осторожно. Надеюсь, речь не о дедлоках идет ? А если нужны кишки для "разбора полетов", то для этого обычно применяют таблицы-журналы (не путать с логами сервера), куда пишется каждый "чих", как правило, триггерами. Т.е. кто чихнул, когда, куда, как и т.д. Вплоть до версирования записей таблиц БД. Добавлено через 8 минут Кстати, по поводу правки в таблице User. Что это у Вас за система, в которой любой юзер может шалить со всей таблицей юзеров ? Есть правило: юзер может только менять и только свои данные. Для того, чтобы манагить всех юзеров, существует админ. А если некий user noname в браузере открыл два окна и с обоих хочет покрыжить сам себя, так на здоровье - для каждого окна будет соблюден один и тот же сценарий и его данные изменятся 2 (два) раза. Ну хочет чувак выстрелить себе в висок два раза - зачем ему отказывать в этом удовольствии ?
1
|
||
|
|
|||||
| 02.09.2020, 21:34 | |||||
Поэтому я бы не стал вообще в БД "асинхронно" что-то писать.Но теперь я хочу доказательств, объяснений - где сказано что TransactionScope аттачится в ADO? Ведь TransactionScope не связан с БД и используется сам по себе. Нашёл интересную ссылку. И правда, оказывается, транзакции по разному можно "готовить". https://docs.microsoft.com/ru-... ansactions буду читать, размышлять... ![]() Добавлено через 4 минуты Ну пусть это будет таблица продажи домов. Нужно продать домик - выставить в записи имя покупателя и время продажи. И есть несколько клиентов которые одновременно хотят купить эту квартирку. Как залочить запись от записи остальных на время записи первого "живчика"? Дальшейшие записи, будем считать, не будут происходить, так как система будет уже считывать значение в БД о имени и времени.
1
|
|||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 03.09.2020, 00:39 | ||
![]() Добавлено через 2 часа 16 минут У меня недавно был разговор за пивком с одним хорошим человеком. Он не программер, он диллер в бизнесе недвижимости. Так вот у них такая система. Сайт продажи-покупки недвижимости. Покупатель видит "дом" и делает заявку. При этом ему выдается сообщение типа "свяжитесь с агентом по телефону x. (Там, конечно, не так просто, все через смс-ки и коды как обычно в таких случаях). Т.е. "дом" не продается и даже не резервируется. На него собирается база потенциальных покупателей. Это круто, т.к. чел делает заявку, но "дом" не перестает быть доступным для других. И если он потянет кота за хвост, то "дом" может быть продан другому покупателю. Когда сделка состоится, "дом" уходит из базы, а всем остальным приходит оповещение с извинениями ![]() Т.е. в базе есть учет заявок. Так же работает и система покупок, но уже там конкурируют риэлторы
1
|
||
|
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,461
|
|||||||||||||||
| 03.09.2020, 07:31 | |||||||||||||||
|
TransactionScope работает: Кликните здесь для просмотра всего текста
А тут можно убедиться, что TransactionScope аттачится к подключению только во время открытия подключения к базе: Кликните здесь для просмотра всего текста
1
|
|||||||||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 04.09.2020, 12:49 | ||
![]() Если все решается гораздо проще - флажком "зарезервировано".
0
|
||
|
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,461
|
|
| 04.09.2020, 12:56 | |
|
MsGuns, ну, это два разных подхода, на самом деле. Флажок не сообщает никакой информации о том, кто зарезервировал. А отдельная таблица "Бронь" или "Резервирование" позволяет не только заразервировать дом, но и дополнительную информацию сохранить. К примеру, время, когда клиент собрался прийти на смотр дома, ID клиента, ID продавца. Иными словами я посчитал, что резервирование - сущность полноценная, а не атрибут дома или его состояние (флажок).
Добавлено через 2 минуты Ну и флажок о резервировании... Это же внешнее состояние, скажем так. Этот флажок не является атрибутом сущности Дом. Не является его частью. Некорректно этот флажок в Дом добавлять.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 04.09.2020, 14:15 | |
|
Usaga,
Во-первых, к "флажку" можно добавить и "подробности" в отдельной таблице - все как Вы сказали. Во-вторых, эти "подробности" относятся к сущности "Дом" так же "близко", как и флажок. Ну а по сути, не вижу смысла пытаться выполнить транзакцию (пр этом изменения могут делаться в нескольких таблицах), тем самым загружая сервер лишней работой, если можно просто сделать проверку. Мы ж ведь знаем оба, что сервер конкурентные транзакции выполнит строго последовательно, и, следовательно, "Дом" второй раз продан не будет ![]() Так что "некорректность" флажка (1 байт) в сущности "Дом" сомнительна, а значит - флажок корректен и уместен. Добавлено через 4 минуты Даже если строго следовать "правилам приличия" и не совать "флажок" в сущность "Дом", а просто проверять наличие соответствующей записи в уловном "журнале продаж", то согласитесь, что проще проверить наличие такой записи, чем ломиться продавать "Дом", получить исключение и потом радостно его обрабатывать на клиенте, загромождая код непрозрачной логикой. Добавлено через 1 минуту При этом, безусловно, и проверка, и "продажа" должны быть выполнены в контексте одной транзакции
0
|
|
| 04.09.2020, 14:15 | |
|
Помогаю со студенческими работами здесь
72
Есть проблема с курсовой на Entity Framework Entity Framework 4 событие полной загрузки Установил Entity Framework, entitydatasource отсутствует в панели инструментов В чем разница между Entity Framework и Entity Framework Core? Entity Framework. Удаление entity без удаления связей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|