Shadowing von EigenschaftenShadow Properties

Shadowing von Eigenschaften sind Eigenschaften, die nicht in der Entitätsklasse .NET definiert werden, aber für den betreffenden Entitätstyp in EF Core-Modell definiert sind.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. Der Wert und der Status dieser Eigenschaften wird ausschließlich in die Änderungsnachverfolgung verwaltet.The value and state of these properties is maintained purely in the Change Tracker.

Shadowing von Eigenschaften sind nützlich, wenn Daten vorhanden sind, in der Datenbank, die nicht für die zugeordnete Entitätstypen verfügbar gemacht werden sollen.Shadow properties are useful when there is data in the database that should not be exposed on the mapped entity types. Sie werden am häufigsten verwendet für Fremdschlüsseleigenschaften, in dem die Beziehung zwischen zwei Entitäten wird durch einen Fremdschlüsselwert in der Datenbank dargestellt, aber die Beziehung wird für die Entitätstypen, die mithilfe von Navigationseigenschaften zwischen den Entitätstypen verwaltet.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.

Volumeschattenkopie-Eigenschaftswerte durch geändert und abgerufen werden können die ChangeTracker API.Shadow property values can be obtained and changed through the ChangeTracker API.

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

Shadowing von Eigenschaften in LINQ-Abfragen über verwiesen werden können die EF.Property statische Methode.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"));

KonventionenConventions

Shadowing von Eigenschaften können gemäß der Konvention erstellt werden, wenn eine Beziehung wird ermittelt, aber keine foreign Key-Eigenschaft in der Klasse der abhängigen Entität gefunden wird.Shadow properties can be created by convention when a relationship is discovered but no foreign key property is found in the dependent entity class. In diesem Fall wird eine Fremdschlüsseleigenschaft Volumeschattenkopie eingeführt.In this case, a shadow foreign key property will be introduced. Den Namen der Schatten Fremdschlüsseleigenschaft <navigation property name><principal key property name> (im Navigationsbereich auf die abhängige Entität, die auf die prinzipalentität verweist, wird für die Benennung verwendet).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). Wenn der Name des dienstprinzipals Schlüsseleigenschaft den Namen der Navigationseigenschaft enthält, dann ist der Name nur <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>. Wenn auf die abhängige Entität keine Navigationseigenschaft vorhanden ist, wird der Name des dienstprinzipals an seiner Stelle verwendet.If there is no navigation property on the dependent entity, then the principal type name is used in its place.

Das folgende Codebeispiel führt beispielsweise zu einem BlogId Shadow-Eigenschaft wird eingeführt, um die Post Entität.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; }
}

DatenanmerkungenData Annotations

Shadowing von Eigenschaften können mit datenanmerkungen nicht erstellt werden.Shadow properties can not be created with data annotations.

Fluent-APIFluent API

Sie können die Fluent-API verwenden, zum Shadowing von Eigenschaften zu konfigurieren.You can use the Fluent API to configure shadow properties. Nachdem Sie die zeichenfolgenüberladung von aufgerufen haben Property können Sie verketten, eine von der Konfiguration aufrufen möchten, für die anderen Eigenschaften.Once you have called the string overload of Property you can chain any of the configuration calls you would for other properties.

Wenn der Name, um angegeben die Property Methode entspricht der Name einer vorhandenen Eigenschaft (eine schatteneigenschaft oder eine Entitätsklasse definiert), und dann der Code, vorhandene Eigenschaft anstatt eine neue Eigenschaft für die Schattenkopien konfigurieren.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; }
}