Проблема з EF Core під час використання Include

Проблема з EF Core під час використання Include

6 Березня 2024 в 01:35 29

Проблема з EF Core під час використання Include може виникати в контексті використання many-to-many зв’язку між сутностями. У цій статті ми розглянемо типову ситуацію, коли під час виконання запиту до бази даних з’являється виняток, який не завжди легко зрозуміти і виправити.

Перш ніж перейти до детального розгляду проблеми, давайте розберемося з тим, що таке EF Core та Include. Entity Framework (EF) Core – це ORM (Object-Relational Mapping) для .NET, який дозволяє робити розробку баз даних більш зручною і продуктивною. Include – це метод EF Core, який використовується для завантаження пов’язаних даних (зв’язаних об’єктів) з бази даних в одному запиті.

Тепер перейдемо до розгляду конкретної проблеми, яка може виникнути при використанні EF Core та Include. Припустимо, що у нас є DbContext, до якого ми додаємо кілька сутностей, кожна з яких бере участь у відношенні багато-до-багатьох. Після збереження змін ми можемо успішно отримати екземпляри цих відносин (наприклад, NameConstituent у нашій схемі) без проблем:

Однак, якщо ми відразу створимо новий екземпляр DbContext і виконаємо той самий код отримання даних, то виникне виняток:

Повідомлення про виняток: Data is Null. This method or property cannot be called on Null values. Нажаль, це повідомлення нічого не означає для нас. Ми також можемо переглянути DbSet у віконні спостереження. У першому DbContext кожен запис показує як значення зовнішнього ключа (цілі числа), так і посилання на зовнішню сутність, на яку вказує цей ключ. Однак в другому DbContext ми бачимо лише цілі числа зовнішніх ключів – немає посилань на класи (властивості показуються як null… що, ймовірно, спробує сказати повідомлення про помилку). Ми не розуміємо, чому пов’язані сутності, видимі в першому DbContext, не видно в другому.