Язык программирования C#9 и платформа .NET5
Шрифт:
Сравнение отслеживаемых и неотслеживаемых запросов
При чтении информации из базы данных в экземпляр
Однако временами из базы данных необходимо получать данные, отслеживать которые с помощью
Чтобы загрузить экземпляр
Преимущество показанного кода в том, что он не увеличивает нагрузку на память, но с ним связан и недостаток: дополнительные вызовы для извлечения той же самой записи
Важные функциональные средства EF Core
Многие функциональные средства из EF 6 были воспроизведены в EF Core, а с каждым выпуском добавляются новые возможности. Множество средств в EF Core усовершенствовано как с точки зрения функциональности, так и в плане производительности. В дополнение к средствам, воспроизведенным из EF 6, инфраструктура EF Core располагает многочисленными новыми возможностями, которые в предыдущей версии отсутствовали. Ниже приведены наиболее важные функциональные средства инфраструктуры EF Core (в произвольном порядке).
На заметку! Фрагменты кода в текущем разделе взяты прямо из завершенной библиотеки доступа к данным
Обработка значений, генерируемых базой данных
Помимо отслеживания изменений и генерации запросов SQL из LINQ существенным преимуществом использования EF Core по сравнению с низкоуровневой инфраструктурой ADO.NET является гладкая обработка значений, генерируемых базой данных. После добавления или обновления сущности исполняющая среда EF Core запрашивает любые данные, генерируемые базой, и автоматически обновляет сущность с применением корректных значений. При работе с низкоуровневой инфраструктурой ADO.NET это пришлось бы делать самостоятельно.
Например, таблица
В качестве примера возьмем добавление новой записи
При выполнении метода
На заметку! Фактически EF Core выполняет параметризованные запросы, но приводимые примеры упрощены ради читабельности.
Поступать так можно и при добавлении в базу данных множества элементов. Исполняющей среде EF Core известно, каким образом связывать значения с корректными сущностями. Когда записи обновляются, то значения первичных ключей уже известны, так что в нашем примере с
Проверка параллелизма
Проблемы с параллелизмом возникают, когда два отдельных процесса (пользователя или системы) пытаются почти одновременно обновить ту же самую запись. Скажем, пользователи User 1 и User 2 получают данные для Customer А. Пользователь User 1 обновляет адрес и сохраняет изменения. Пользователь User 2 обновляет кредитный риск и пытается сохранить ту же запись. Если сохранение для пользователя User 2 сработало, тогда изменения от пользователя User 1 будут отменены, т.к. после того, как пользователь User 2 извлек запись, адрес изменился. Другой вариант — отказ сохранения для пользователя User 2, когда изменения для User 1 записываются, но изменения для User 2 — нет.
Обработка описанной ситуации зависит от требований приложения. Решения простираются от бездействия (второе обновление переписывает первое) и применения оптимистического параллелизма (второе обновление терпит неудачу) до более сложных подходов, таких как проверка индивидуальных полей. За исключением варианта бездействия (повсеместно считающегося признаком плохого стиля программирования) разработчики обязаны знать, когда возникают проблемы с параллелизмом, чтобы иметь возможность обработать их надлежащим образом.