Właściwości w tleShadow Properties

Właściwości cienia są właściwości, które nie są zdefiniowane w klasie jednostki .NET, ale są zdefiniowane dla tego typu jednostki w modelu podstawowej EF.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 są 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, gdy brak danych w bazie danych, które nie powinny zostać ujawnione w typach jednostek mapowane.Shadow properties are useful when there is data in the database that should not be exposed on the mapped entity types. Są one najczęściej używane dla właściwości klucza obcego, gdzie relację między dwiema jednostkami jest reprezentowany przez wartość klucza obcego w bazie danych, ale relacji jest zarządzana w przypadku typów jednostek przy użyciu właściwości nawigacji między typami jednostek.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 mogą być uzyskane i zmieniać 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 może być przywoływany w zapytań 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 można tworzyć przez Konwencję, gdy zostanie wykryta relacji, ale ma właściwości klucza obcego znajduje się w klasie jednostki zależnej.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 tle właściwości kluczy obcych.In this case, a shadow foreign key property will be introduced. Właściwość klucza obcego cień będzie miała nazwę <navigation property name><principal key property name> (nawigacji na jednostki zależnej wskazuje główną jednostki, jest używany dla nazwy).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 główna właściwości klucza zawierają nazwę właściwości nawigacji, a następnie nazwę będzie działać <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 na jednostki zależnej, nazwa typu podmiotu zabezpieczeń jest używany w jego 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 wprowadzeniem do właściwości tle 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; }
}

Adnotacji danychData Annotations

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

Interfejsu API FluentFluent API

Można skonfigurować właściwości w tle, można użyć interfejsu API Fluent.You can use the Fluent API to configure shadow properties. Po wywołaniu przeciążenia ciąg Property można łańcucha żadnego z tych wywołań konfiguracji jak dla 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 metoda zgodna z nazwą istniejącej właściwości (właściwość tle lub zdefiniowanych w klasie jednostek), a następnie kod służy do konfigurowania tego istniejącej właściwości, zamiast wprowadzać nową właściwość 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; }
}