Schaduweigenschappen zijn eigenschappen die niet zijn gedefinieerd in de .NET entity-klasse, maar wel voor dat entiteitstype in het EF Core-model. De waarden en toestanden van deze attributen worden uitsluitend in de wijzigingstracker bijgehouden. Geshaded properties zijn nuttig wanneer data in een database niet blootgesteld mag worden aan het gemapte entiteitstype. De kern van het Entity Framework introduceert een nieuw type attribuut genaamd het "shadow"-attribuut, dat niet bestaat in EF 6.x.
Het schaduwattribuut is er niet. .NET entiteitsklassen. In plaats daarvan kun je het configureren voor een specifiek entiteitstype in het entiteitsdatamodel. Het kan worden geconfigureerd in de OnModelCreating()-methode van de contextklasse.
Het volgende diagram illustreert het schaduwattribuut.
Zoals te zien is op de afbeelding hierboven, behoort het schaduwattribuut niet tot je entiteitsklasse. Daarom kun je er geen toegang toe krijgen wanneer je andere eigenschappen van een entiteit raadpleegt. Geshaded properties kunnen alleen worden geconfigureerd voor entiteitstypen bij het bouwen van het entity datamodel, en ze worden ook gekoppeld aan databasekolommen. De waarde en status van de schaduweigenschap worden alleen bijgehouden in de wijzigingstracker.
Laten we de praktische aspecten van schaduweigenschappen begrijpen. Stel dat we de aanmaak- en updatedata van elk record in de databasetabel moeten bijhouden. Je hebt geleerd hoe je de aanmaak- en wijzigingsdata voor entiteiten in EF Core kunt instellen door de eigenschappen CreatedDate en UpdatedDate in de entiteitsklasse te definiëren. Hier zullen we zien hoe we hetzelfde resultaat kunnen bereiken door schaduweigenschappen te gebruiken in plaats van schaduweigenschappen in de entiteitsklasse op te nemen.
Overweeg de volgende Student entity-klassen.
De hierboven genoemde studentenklasDe attributen CreatedDate en UpdatedDate zijn niet inbegrepenom de tijd bij te houden wanneer het werd gemaakt of bijgewerkt. We configureren ze als schaduweigenschappen op de Student-entiteit.
Definieer schaduweigenschappen
Je kunt de OnModelCreating()-methode gebruiken om schaduweigenschappen voor entiteitstypen te definiëren met behulp van de Fluent API.
De volgende configuratie configureert twee geshaded eigenschappen, CreatedDate en UpdatedDate, voor de Student-entiteit.
Zoals je kunt zien, wordt de Property()-methode gebruikt om de schaduweigenschappen te configureren. Specificeer de naam van de schaduweigenschap als een string en het type als generieke parameter. Als de naam die in de Property()-methode is gespecificeerd overeenkomt met de naam van een bestaande eigenschap, zal EF Core die bestaande eigenschap configureren als een schaduweigenschap in plaats van een nieuwe schaduweigenschap te introduceren.
Schaduweigenschappen in de database
Zodra de schaduweigenschappen zijn gedefinieerd, moeten we het databaseschema bijwerken omdat de schaduweigenschappen worden gekoppeld aan de overeenkomstige databasekolommen.
Voeg hiervoor een databasemigratie toe in Visual Studio's Package Manager-console met het volgende commando.
De Student-tabel zal nu twee kolommen bevatten, CreatedDate en UpdatedDate in SQL Server, zoals hieronder weergegeven.
Dus zelfs als we deze eigenschappen niet opnemen in de Student-klasse en ze configureren als schaduweigenschappen, zal de database de bijbehorende kolommen hebben.
Toegang tot het schaduwterrein
Je kunt de Property()-methode gebruiken om de waarde van de schaduweigenschap in EntityEnter te krijgen of in te stellen. De volgende code raadpleegt de waarde van de schaduweigenschap.
In ons scenario willen we echter automatisch de waarden op deze schaduweigenschappen instellen in de SaveChanges()-methode, zodat we ze niet handmatig hoeven te zetten op elk entiteitsobject. Overschrijf dus de SaveChanges()-methode in de contextklasse zoals hieronder getoond.
Dit stelt automatisch waarden in voor de schaduweigenschappen CreatedDate en UpdatedDate.
Voer nu de volgende code uit en controleer de records in de database.
De bovenstaande code zal de volgende records invoegen in CreatedDate en UpdatedDate voor studenten.
Door de schaduweigenschappen te configureren, hoeven we ze dus niet in de entiteitsklasse op te nemen.
Configureer de schaduweigenschappen op alle entiteiten
In plaats van schaduweigenschappen handmatig op alle entiteiten tegelijk te configureren, kun je ze handmatig configureren.
We kunnen bijvoorbeeld alle entiteiten van CreatedDate en UpdatedDate de vorige keer configureren, zoals te zien is in de volgende afbeelding.
Wanneer moet je de schaduw-eigendom gebruiken?
Het schaduwattribuut kan in twee situaties worden gebruikt:
Wanneer je databasekolommen niet wilt blootstellen op toegewezen entiteiten, zoals in het hierboven besproken scenario. Wanneer je geen vreemde sleutelattributen wilt blootstellen, maar alleen navigatieattributen wilt gebruiken om relaties te beheren. De vreemde sleutel-eigenschap zal een schaduw-eigenschap zijn en wordt toegewezen aan de databasekolom, maar wordt niet als eigenschap van de entiteit blootgesteld. (In EF Core, als je geen vreemde sleutel-eigenschap definieert in een entiteitsklasse, genereert deze automatisch een schaduw-eigenschap hiervoor.) Je hoeft vreemde sleutel-eigenschappen niet handmatig te configureren. )
Weg:
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
|