Propriétés de l’ombreShadow Properties

Propriétés de clichés instantanés sont ne sont pas définis dans votre classe d’entité .NET mais qui sont définies pour ce type d’entité dans le modèle EF Core.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. La valeur et l’état de ces propriétés est conservée dans le traceur de modifications.The value and state of these properties is maintained purely in the Change Tracker.

Propriétés de l’ombre sont utiles lorsqu’il existe des données dans la base de données qui ne doit pas être exposée sur les types d’entité mappée.Shadow properties are useful when there is data in the database that should not be exposed on the mapped entity types. Elles sont souvent utilisées pour les propriétés de clé étrangère, où la relation entre deux entités est représentée par une valeur de clé étrangère dans la base de données, mais la relation est gérée sur les types d’entités à l’aide des propriétés de navigation entre les types d’entités.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.

Les valeurs de propriété de clichés instantanés peuvent être obtenues et modifiés par le biais du ChangeTracker API.Shadow property values can be obtained and changed through the ChangeTracker API.

   context.Entry(myBlog).Property("LastUpdated").CurrentValue = DateTime.Now;

Propriétés de clichés instantanés peuvent être référencées dans les requêtes LINQ via la EF.Property méthode statique.Shadow properties can be referenced in LINQ queries via the EF.Property static method.

var blogs = context.Blogs
    .OrderBy(b => EF.Property<DateTime>(b, "LastUpdated"));

ConventionsConventions

Occulter les propriétés peuvent être créées par convention, lorsqu’une relation est découvert, mais aucune propriété de clé étrangère ne se trouve dans la classe d’entité dépendante.Shadow properties can be created by convention when a relationship is discovered but no foreign key property is found in the dependent entity class. Dans ce cas, une propriété de clé étrangère de clichés instantanés est introduite.In this case, a shadow foreign key property will be introduced. La propriété de clé étrangère de clichés instantanés est nommée <navigation property name><principal key property name> (le volet de navigation sur l’entité dépendante, qui pointe vers l’entité principale, est utilisé pour l’attribution de noms).The shadow foreign key property will be named <navigation property name><principal key property name> (the navigation on the dependent entity, which points to the principal entity, is used for the naming). Si le nom de la propriété de clé principale inclut le nom de la propriété de navigation, puis le nom sera simplement <principal key property name>.If the principal key property name includes the name of the navigation property, then the name will just be <principal key property name>. S’il n’existe aucune propriété de navigation sur l’entité dépendante, le nom de type principal est utilisé à la place.If there is no navigation property on the dependent entity, then the principal type name is used in its place.

Par exemple, le code suivant entraîne une BlogId est présentée à la propriété shadow le Post entité.For example, the following code listing will result in a BlogId shadow property being introduced to the Post entity.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> 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; }
}

Annotations de donnéesData Annotations

Occulter les propriétés ne peuvent pas être créées avec des annotations de données.Shadow properties can not be created with data annotations.

API FluentFluent API

Vous pouvez utiliser l’API Fluent pour configurer les propriétés de l’ombre.You can use the Fluent API to configure shadow properties. Une fois que vous avez appelé la surcharge de chaîne de Property vous pouvez chaîner des appels de configuration vous le feriez pour d’autres propriétés.Once you have called the string overload of Property you can chain any of the configuration calls you would for other properties.

Si le nom fourni pour le Property méthode correspond au nom d’une propriété existante (une propriété de clichés instantanés ou défini sur la classe d’entité), puis le code configure cette propriété existante au lieu d’introduire une nouvelle propriété de clichés instantanés.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 DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property<DateTime>("LastUpdated");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}