Shadow свойствата са свойства, които не са дефинирани в .NET класа обекти, но са дефинирани за този тип обект в EF Core модела. Стойностите и състоянията на тези атрибути се поддържат изцяло в тракера за промяна. Засенчените свойства са полезни, когато данните в база данни не трябва да бъдат изложени върху типа на картографирания обект. Ядрото на Entity Framework въвежда нов тип атрибут, наречен атрибут "shadow", който не съществува в EF 6.x.
Атрибутът сянка го няма. .NET класове на обекти. Вместо това можете да го конфигурирате за конкретен тип обект в модела на данни на обекта. Той може да бъде конфигуриран чрез метода OnModelCreating() на контекстния клас.
Следващата диаграма илюстрира атрибута на сянката.
Както е показано на изображението по-горе, атрибутът сянка не принадлежи към вашия клас на обекти. Затова не можете да го достъпите при достъп до други свойства на дадена единица. Засенчените свойства могат да се конфигурират само за типове обекти при изграждане на модела на данни на обекти, като те също ще бъдат съпоставени към колони на базата данни. Стойността и състоянието на сенчестото свойство се поддържат само в тракера за промяна.
Нека разберем практическите аспекти на сенчестите свойства. Да кажем, че трябва да поддържаме датите на създаване и обновяване на всеки запис в таблицата с базата данни. Научихте как да задавате датите на създаване и модификация за обекти в EF Core, като дефинирате свойствата CreatedDate и UpdatedDate в класа на entity. Тук ще видим как да постигнем същия резултат, като използваме свойствата на сенките вместо включване на свойствата на сенките в класа на обектите.
Разгледайте следните курсове за студентски обекти.
Студентският клас по-гореАтрибутите CreatedDate и UpdatedDate не са включениза да се запази времето, в което е създадено или обновено. Конфигурираме ги като сенчести свойства върху студентската единица.
Дефинирайте свойствата на сенките
Можете да използвате метода OnModelCreating(), за да дефинирате свойства на сенките за типове обекти чрез Fluent API.
Следната конфигурация конфигурира две засенчени свойства, CreatedDate и UpdatedDate, за студентската единица.
Както виждате, методът Property() се използва за конфигуриране на свойствата на сенките. Задайте името на свойството на сянката като низ, а типа като общ параметър. Ако името, посочено в метода Property(), съвпада с името на съществуващо свойство, EF Core ще конфигурира това съществуващо свойство като сянково свойство, вместо да въвежда ново сянково свойство.
Сенчести свойства в базата данни
След като свойствата на сенките са дефинирани, трябва да актуализираме схемата на базата данни, тъй като свойствата на сенките ще бъдат съответствани на съответните колони на базата данни.
За да направите това, добавете миграция на база данни в конзолата Package Manager на Visual Studio чрез следната команда.
Таблицата Student вече ще включва две колони – CreatedDate и UpdatedDate в SQL Server, както е показано по-долу.
Така че дори и да не включим тези свойства в класа Student и не ги конфигурираме като shadow свойства, базата данни ще има съответните колони.
Достъп до сенчестата собственост
Можеш да използваш метода Property(), за да получиш или зададеш стойността на shadow свойството в EntityEntry. Следващият код достъпва стойността на свойството на сенката.
Въпреки това, в нашия сценарий искаме автоматично да зададем стойностите на тези свойства на сенките чрез метода SaveChanges(), за да не се налага да ги задаваме ръчно на всеки обект обект. Затова презапишете метода SaveChanges() в контекстния клас, както е показано по-долу.
Това автоматично ще задава стойности за сенчестите свойства CreatedDate и UpdatedDate.
Сега изпълни следния код и провери записите в базата данни.
Горният код ще вмъкне следните записи в CreatedDate и UpdatedDate за учениците.
Така че, като конфигурираме свойствата на сенките, не е нужно да ги включваме в класа на обектите.
Конфигурирайте сенчестите свойства на всички обекти
Вместо ръчно да конфигурирате сенчестите свойства на всички обекти наведнъж, можете да ги конфигурирате ръчно.
Например, можем да конфигурираме всички обекти на CreatedDate и UpdatedDate миналия път, както е показано на следващото изображение.
Кога да използвам свойството на сянката?
Атрибутът сянка може да се използва в две ситуации:
Когато не искате да излагате колони на база данни върху картографирани обекти, както е описано по-горе. Когато не искате да разкривате външни ключове атрибути, а искате да използвате навигационните атрибути само за управление на връзки. Свойството foreign key ще бъде shadow свойство и ще бъде преобразувано в колоната на базата данни, но няма да бъде изложено като свойство на обекта. (В EF Core, ако не дефинирате свойство на външен ключ в клас на обекти, автоматично ще се генерира сянково свойство за това.) Не е нужно ръчно да конфигурирате свойствата на външни ключове. )
Ресурси:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
|