Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 36284|Відповідь: 0

[Джерело] EF Core Series (3) Атрибути тіні кадру сутності [Перевидання]

[Копіювати посилання]
Опубліковано 2021-2-7 14:15:08 | | | |
EF Core Series 2 інкапсулює OnModelCreating, створює індекси за допомогою відображень та інше
https://www.itsvse.com/thread-9392-1-1.html

Властивості тіні — це властивості, які не визначені в класі сутності .NET, але визначені для цього типу сутності в моделі EF Core. Значення та стани цих атрибутів зберігаються виключно у трекері змін. Затінені властивості корисні, коли дані в базі даних не повинні відображатися на типі відображеної сутності.
Ядро Entity Framework вводить новий тип атрибуту під назвою атрибут «тінь», якого немає в EF 6.x.

Атрибут тіні відсутній. .NET класи сутності. Натомість ви можете налаштувати його для конкретного типу сутності в моделі даних сутності. Його можна налаштувати за методом OnModelCreating() класу контексту.

Наступна діаграма ілюструє атрибут тіні.



Як показано на зображенні вище, атрибут тіні не належить до вашого класу сутності. Тому ви не можете отримати до нього доступ при доступі до інших властивостей сутності. Затінені властивості можна налаштовувати лише для типів сутностей при побудові моделі даних сутності, і вони також будуть відображатися у стовпці бази даних. Вартість і стан тіньової властивості зберігаються лише у трекері змін.

Давайте розглянемо практичні аспекти властивостей тіні. Припустимо, нам потрібно підтримувати дати створення та оновлення кожного запису в таблиці бази даних. Ви навчилися встановлювати дати створення та зміни для сутностей у EF Core, визначаючи властивості CreatedDate і UpdatedDate у класі сутності. Тут ми побачимо, як досягти того ж результату, використовуючи властивості тіні замість включення властивостей тіней до класу сутності.

Розглянемо наступні студентські курси.

Студентський клас вищеАтрибути CreatedDate та UpdatedDate не включеніщоб підтримувати час створення або оновлення. Ми налаштовуємо їх як тіньові властивості на сутності Студента.

Визначити властивості тіні

Ви можете використати метод OnModelCreating() для визначення тіньових властивостей типів сутностей за допомогою Fluent API.

Наступна конфігурація налаштовує дві затінені властивості — CreatedDate і UpdatedDate — для сутності Студента.


Як бачите, метод Property() використовується для налаштування властивостей тіні. Вкажіть назву властивості тіні як рядок, а тип — як загальний параметр. Якщо ім'я, зазначене в методі Property(), збігається з назвою існуючої властивості, EF Core налаштовує цю існуючу властивість як тіньову властивість замість введення нової тіньової властивості.

Властивості тіні в базі даних

Після визначення властивостей тіней потрібно оновити схему бази даних, оскільки властивості тіней будуть відображатися у відповідні стовпці бази даних.

Для цього додайте міграцію бази даних у консолі Package Manager Visual Studio за допомогою наступної команди.


Таблиця Student тепер міститиме два стовпці — CreatedDate та UpdatedDate у SQL Server, як показано нижче.



Тож навіть якщо ми не включимо ці властивості до класу Student і не налаштуємо їх як тіньові властивості, база даних матиме відповідні стовпці.

Доступ до тіньової власності

Ви можете використати метод Property(), щоб отримати або встановити значення властивості тіні в EntityEntry. Наступний код звертається до значення властивості тіні.

Однак у нашому сценарії ми хочемо автоматично встановлювати значення на ці властивості тіней у методі SaveChanges(), щоб не доводилося встановлювати їх вручну на кожному об'єкті сутності. Отже, перезапишіть метод SaveChanges() у контекстному класі, як показано нижче.

Це автоматично встановлює значення для властивостей тіней CreatedDate та UpdatedDate.

Тепер виконайте наступний код і перевірте записи в базі даних.


Вищенаведений код додасть такі записи у розділах CreatedDate та UpdatedDate для студентів.



Отже, налаштовуючи властивості тіні, нам не потрібно включати їх до класу сутності.

Налаштуйте властивості тіней на всіх об'єктах

Замість того, щоб вручну налаштовувати властивості тіней на всіх об'єктах одночасно, ви можете налаштовувати їх вручну.

Наприклад, ми можемо налаштувати всі об'єкти CreatedDate і UpdatedDate минулого разу, як показано на наступному зображенні.


Коли використовувати властивість тінь?

Атрибут тіні можна використовувати у двох ситуаціях:

Коли ви не хочете відкривати стовпці бази даних на відображених об'єктах, як у описаному вище сценарії.
Коли ви не хочете відкривати атрибути зовнішнього ключа, а лише використовувати навігаційні атрибути для керування зв'язками. Властивість зовнішнього ключа буде тіньовою властивістю і буде відображатися у стовпці бази даних, але не буде відкрито як властивість сутності. (У EF Core, якщо ви не визначаєте властивість зовнішнього ключа в класі сутності, він автоматично генерує тіньову властивість для цього.) Вам не потрібно вручну налаштовувати властивості зовнішніх ключів. )


Ресурси:

Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.




Попередній:MySQL експортує результати запиту у файл
Наступний:ASP.NET Основний підручник ViewComponent з використання ViewComponent
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com