Shadow properties are properties that are not defined in your .NET entity class but are defined for that entity type in the EF Core model. The value and state of these properties is maintained purely in the Change Tracker.
Shadow properties are useful when there is data in the database that should not be exposed on the mapped entity types. They are most often used for foreign key properties, where the relationship between two entities is represented by a foreign key value in the database, but the relationship is managed on the entity types using navigation properties between the entity types.
https://docs.microsoft.com/en-us/ef/core/modeling/shadow-properties
For example, the following code listing will result in a BlogId
shadow property being introduced to the Post
entity.
class MyContext : DbContext{ public DbSetBlogs { get; set; } public DbSet Posts { get; set; }}public class Blog{ public int BlogId { get; set; } public string Url { get; set; } public List Posts { get; set; }}public class Post{ public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public Blog Blog { get; set; }}
If the name supplied to the Property
method matches the name of an existing property (a shadow property or one defined on the entity class), then the code will configure that existing property rather than introducing a new shadow property.
class MyContext : DbContext{ public DbSetBlogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity () .Property ("LastUpdated"); }}public class Blog{ public int BlogId { get; set; } public string Url { get; set; }}