Właściwości w tleShadow Properties

Właściwości w tle są właściwości, które nie są zdefiniowane w klasie jednostki .NET, ale są zdefiniowane dla tego typu jednostki w modelu platformy 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. Wartość i stan tych właściwości jest obsługiwane wyłącznie w śledzenie zmian.The value and state of these properties is maintained purely in the Change Tracker.

Właściwości w tle są przydatne w przypadku danych w bazie danych, które nie powinny zostać ujawnione w typach zamapowanego jednostki.Shadow properties are useful when there is data in the database that should not be exposed on the mapped entity types. W większości przypadków są one używane dla właściwości klucza obcego, których relację między dwiema jednostkami jest reprezentowany przez wartość klucza obcego w bazie danych, lecz relację odbywa się na typy jednostek przy użyciu właściwości nawigacji między typami encji.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.

Wartości właściwości w tle, które mogą być uzyskane i zmienić za pomocą ChangeTracker interfejsu API.Shadow property values can be obtained and changed through the ChangeTracker API.

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

Właściwości w tle mogą być przywoływane w zapytaniach LINQ za pośrednictwem EF.Property metody statycznej.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"));

KonwencjeConventions

Właściwości w tle mogą być tworzone przez Konwencję, gdy relacji został odnaleziony, ale nie właściwość klucza obcego znajduje się w klasie jednostki zależne.Shadow properties can be created by convention when a relationship is discovered but no foreign key property is found in the dependent entity class. W takim przypadku zostaną wprowadzone właściwości klucza obcego w tle.In this case, a shadow foreign key property will be introduced. Właściwość klucza obcego w tle będą miały nazwę nadaną <navigation property name><principal key property name> (nawigacji na jednostki zależne wskazuje główną jednostki, używany na potrzeby nazywania).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). Jeśli nazwa właściwości klucza podmiotu zabezpieczeń zawiera nazwę właściwości nawigacji, a następnie po prostu nazwą będzie <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>. Jeśli nie ma właściwości nawigacji jednostki zależne, Nazwa Typ podmiotu zabezpieczeń jest używana w tym miejscu.If there is no navigation property on the dependent entity, then the principal type name is used in its place.

Na przykład w poniższym fragmencie kodu spowoduje BlogId właściwości w tle są wprowadzane do Post jednostki.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; }
}

Adnotacje danychData Annotations

Nie można utworzyć właściwości w tle przy użyciu adnotacji danych.Shadow properties can not be created with data annotations.

Interfejs Fluent APIFluent API

Interfejs Fluent API umożliwiają skonfigurowanie właściwości w tle.You can use the Fluent API to configure shadow properties. Gdy wywołujesz przeciążenie ciągu Property można połączyć w łańcuch dowolne wywołania konfiguracji, jak w przypadku innych właściwości.Once you have called the string overload of Property you can chain any of the configuration calls you would for other properties.

Jeśli nazwa dostarczona do Property metody jest zgodna z nazwą istniejącej właściwości (właściwość w tle lub jeden zdefiniowany w klasie jednostek), a następnie kod służy do konfigurowania właściwości istniejących, zamiast wprowadzać nowe właściwości w tle.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; }
}