Generierte WerteGenerated Values

Wert-Generation-MusterValue Generation Patterns

Es gibt drei Wert Generation Muster, die für Eigenschaften verwendet werden können:There are three value generation patterns that can be used for properties:

  • Kein Wert generiertNo value generation
  • Generiert am Wert hinzufügenValue generated on add
  • Generierter Wert auf Hinzufügen oder aktualisierenValue generated on add or update

Kein Wert generiertNo value generation

Kein Wert generiert bedeutet, dass Sie einen gültigen Wert in der Datenbank gespeichert werden immer bereitgestellt werden.No value generation means that you will always supply a valid value to be saved to the database. Neue Entitäten muss diese gültige Wert zugewiesen werden, bevor sie den Kontext hinzugefügt werden.This valid value must be assigned to new entities before they are added to the context.

Generiert am Wert hinzufügenValue generated on add

Mehrwert generiert bedeutet, die ein Wert für die neue Entitäten generiert wird.Value generated on add means that a value is generated for new entities.

-Werte können je nach den Datenbankanbieter, der verwendet wird, werden die Clientseite von EF oder in der Datenbank generiert.Depending on the database provider being used, values may be generated client side by EF or in the database. Wenn der Wert von der Datenbank generiert wird, kann EF einen temporären Wert zuweisen, wenn Sie die Entität dem Kontext hinzufügen.If the value is generated by the database, then EF may assign a temporary value when you add the entity to the context. Diese temporäre Wert dann ersetzt werden durch den Wert generierten Datenbank während der SaveChanges().This temporary value will then be replaced by the database generated value during SaveChanges().

Wenn Sie eine Entität in den Kontext, die ein Wert der Eigenschaft zugewiesen wird hinzufügen, versucht EF, fügen Sie diesen Wert an, anstatt einen neuen zu generieren.If you add an entity to the context that has a value assigned to the property, then EF will attempt to insert that value rather than generating a new one. Eine Eigenschaft gilt, um einen Wert zugewiesen wird, wenn sie nicht den CLR-Standardwert zugeordnet ist (null für string, 0 für int, Guid.Empty für Guidusw..).A property is considered to have a value assigned if it is not assigned the CLR default value (null for string, 0 for int, Guid.Empty for Guid, etc.). Weitere Informationen finden Sie unter explizite Werte für generierte Eigenschaften.For more information, see Explicit values for generated properties.

Warnung

Wie der Wert für die hinzugefügte Entitäten generiert wird, hängt, wenn den Datenbankanbieter, der verwendet wird.How the value is generated for added entities will depend on the database provider being used. Datenbankanbieter können automatisch Generation der Wert für einige Eigenschaftentypen einrichten, aber andere müssen Sie möglicherweise manuell einrichten, wie der Wert generiert wird.Database providers may automatically setup value generation for some property types, but others may require you to manually setup how the value is generated.

Z. B. Wenn Sie SQL Server verwenden möchten, Werte automatisch generiert werden für GUID Eigenschaften (mit der SQL Server-Algorithmus der sequenzielle GUID).For example, when using SQL Server, values will be automatically generated for GUID properties (using the SQL Server sequential GUID algorithm). Aber wenn Sie, dass angeben eine DateTime -Eigenschaft generiert wird hinzufügen, dann müssen Sie richten Sie eine Möglichkeit für die Werte generiert werden soll.However, if you specify that a DateTime property is generated on add, then you must setup a way for the values to be generated. Eine Möglichkeit dazu besteht darin konfigurieren Sie den Standardwert GETDATE(), finden Sie unter Standardwerte.One way to do this, is to configure a default value of GETDATE(), see Default Values.

Generierter Wert auf Hinzufügen oder aktualisierenValue generated on add or update

Generierter Wert hinzufügen oder Update bedeutet, dass ein neuer Wert generiert wird, jedes Mal, wenn der Eintrag (Insert oder Update) gespeichert ist.Value generated on add or update means that a new value is generated every time the record is saved (insert or update).

Wie value generated on add, wenn Sie einen Wert für die Eigenschaft auf eine neu hinzugefügte Instanz einer Entität angeben, dass der Wert eingefügt werden soll, anstatt einen Wert, der generiert wird.Like value generated on add, if you specify a value for the property on a newly added instance of an entity, that value will be inserted rather than a value being generated. Es ist auch möglich, einen expliziten Wert festzulegen, bei der Aktualisierung.It is also possible to set an explicit value when updating. Weitere Informationen finden Sie unter explizite Werte für generierte Eigenschaften.For more information, see Explicit values for generated properties.

Warnung

Wie der Wert für hinzugefügter und aktualisierter Entitäten generiert wird, hängt, wenn den Datenbankanbieter, der verwendet wird.How the value is generated for added and updated entities will depend on the database provider being used. Datenbankanbieter können automatisch Generation der Wert für einige Eigenschaftstypen einrichten, während andere Benutzer müssen Sie manuell einrichten, wie der Wert generiert wird.Database providers may automatically setup value generation for some property types, while others will require you to manually setup how the value is generated.

Bei Verwendung von SQL Server, beispielsweise byte[] Eigenschaften, wie auf generiert festgelegt werden, hinzufügen oder aktualisieren und als parallelitätstoken, wird Setup mit der rowversion -Datentyp - so, dass Werte in der Datenbank generiert werden.For example, when using SQL Server, byte[] properties that are set as generated on add or update and marked as concurrency tokens, will be setup with the rowversion data type - so that values will be generated in the database. Aber wenn Sie, dass angeben eine DateTime -Eigenschaft generiert wird auf hinzuzufügen oder zu aktualisieren, müssen Sie einrichten, eine Möglichkeit für die Werte generiert werden soll.However, if you specify that a DateTime property is generated on add or update, then you must setup a way for the values to be generated. Eine Möglichkeit dazu besteht darin konfigurieren Sie den Standardwert GETDATE() (finden Sie unter Standardwerte) zum Generieren von Werten für neue Zeilen.One way to do this, is to configure a default value of GETDATE() (see Default Values) to generate values for new rows. Sie können dann einen Trigger auf Datenbankebene verwenden, zum Generieren von Werten während eines Updates (z. B. die folgenden Beispiele für Trigger).You could then use a database trigger to generate values during updates (such as the following example trigger).

CREATE TRIGGER [dbo].[Blogs_UPDATE] ON [dbo].[Blogs]
    AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
                  
    IF ((SELECT TRIGGER_NESTLEVEL()) > 1) RETURN;
    
    DECLARE @Id INT
        
    SELECT @Id = INSERTED.BlogId
    FROM INSERTED
          
    UPDATE dbo.Blogs
    SET LastUpdated = GETDATE()
    WHERE BlogId = @Id
END

KonventionenConventions

Gemäß der Konvention nicht zusammengesetzte Primärschlüssel vom Typ short, Int, long oder Guid wird eingerichtet werden, dass Werte generiert, auf Hinzufügen.By convention, non-composite primary keys of type short, int, long, or Guid will be setup to have values generated on add. Alle anderen Eigenschaften werden Setup kein Wert generiert.All other properties will be setup with no value generation.

DatenanmerkungenData Annotations

Kein Wert generiert (Datenanmerkungen)No value generation (Data Annotations)

public class Blog
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int BlogId { get; set; }
    public string Url { get; set; }
}

Mehrwert generiert (Datenanmerkungen)Value generated on add (Data Annotations)

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime Inserted { get; set; }
}

Warnung

Dadurch können nur EF darüber informiert, dass die Werte für hinzugefügte Entitäten generiert werden, dies garantiert nicht, dass EF den eigentlichen Mechanismus zum Generieren von Werten einrichten werden.This just lets EF know that values are generated for added entities, it does not guarantee that EF will setup the actual mechanism to generate values. Finden Sie unter Mehrwert generiert finden Sie weitere Details.See Value generated on add section for more details.

Generiert am Wert hinzufügen oder aktualisieren (Datenanmerkungen)Value generated on add or update (Data Annotations)

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime LastUpdated { get; set; }
}

Warnung

Dadurch können nur EF darüber informiert, dass die Werte für hinzugefügte oder aktualisierte Entitäten generiert werden, dies garantiert nicht, dass EF den eigentlichen Mechanismus zum Generieren von Werten einrichten werden.This just lets EF know that values are generated for added or updated entities, it does not guarantee that EF will setup the actual mechanism to generate values. Finden Sie unter auf generierter Wert hinzufügen oder Aktualisieren von finden Sie weitere Details.See Value generated on add or update section for more details.

Fluent-APIFluent API

Sie können die Fluent-API verwenden, um das Value-Generation-Muster für eine bestimmte Eigenschaft zu ändern.You can use the Fluent API to change the value generation pattern for a given property.

Kein Wert generiert (Fluent-API)No value generation (Fluent API)

modelBuilder.Entity<Blog>()
    .Property(b => b.BlogId)
    .ValueGeneratedNever();

Mehrwert generiert (Fluent-API)Value generated on add (Fluent API)

modelBuilder.Entity<Blog>()
    .Property(b => b.Inserted)
    .ValueGeneratedOnAdd();

Warnung

ValueGeneratedOnAdd() können nur wissen, dass Werte für hinzugefügte Entitäten generiert werden, dies garantiert nicht, dass EF den eigentlichen Mechanismus zum Generieren von Werten einrichten, wird EF.ValueGeneratedOnAdd() just lets EF know that values are generated for added entities, it does not guarantee that EF will setup the actual mechanism to generate values. Finden Sie unter Mehrwert generiert finden Sie weitere Details.See Value generated on add section for more details.

Generiert am Wert hinzufügen oder aktualisieren (Fluent-API)Value generated on add or update (Fluent API)

modelBuilder.Entity<Blog>()
    .Property(b => b.LastUpdated)
    .ValueGeneratedOnAddOrUpdate();

Warnung

Dadurch können nur EF darüber informiert, dass die Werte für hinzugefügte oder aktualisierte Entitäten generiert werden, dies garantiert nicht, dass EF den eigentlichen Mechanismus zum Generieren von Werten einrichten werden.This just lets EF know that values are generated for added or updated entities, it does not guarantee that EF will setup the actual mechanism to generate values. Finden Sie unter auf generierter Wert hinzufügen oder Aktualisieren von finden Sie weitere Details.See Value generated on add or update section for more details.