Generierten 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

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

Auf generierten Wert hinzufügenValue generated on add

Auf generierten Wert hinzufügen bedeutet, der ein Wert für neue Entitäten generiert wird.Value generated on add means that a value is generated for new entities.

Abhängig von der Datenbankanbieter verwendet wird, können Werte sein 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, möglicherweise EF einen temporären Wert zuweisen, wenn Sie den Kontext die Entität 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 der Datenbank generierte während SaveChanges().This temporary value will then be replaced by the database generated value during SaveChanges().

Wenn Sie den Kontext eine Entität, dessen Wert der Eigenschaft zugewiesen hinzufügen, versucht EF, legen Sie diesen Wert, sondern einen neuer Typ generiert.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 ein Wert zugewiesen, wenn er nicht den CLR-Standardwert zugewiesen 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 expliziten Werte für die generierten Eigenschaften.For more information, see Explicit values for generated properties.

Warnung

Wie der Wert für die hinzugefügten Entitäten generiert wird, hängen für den Datenbankanbieter verwendet wird.How the value is generated for added entities will depend on the database provider being used. Datenbankanbieter möglicherweise automatisch Wert Generation für bestimmte 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.

Beispielsweise bei Verwendung von SQL Server, Werte automatisch generiert werden für GUID Eigenschaften (mithilfe des SQL Server sequenziellen GUID-Algorithmus).For example, when using SQL Server, values will be automatically generated for GUID properties (using the SQL Server sequential GUID algorithm). Jedoch, wenn Sie, dass angeben eine DateTime Eigenschaft generiert wird auf 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 hierzu ist, so 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 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 Datensatz (INSERT- oder Update) gespeichert wird.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 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 expliziten Werte für die generierten Eigenschaften.For more information, see Explicit values for generated properties.

Warnung

Wie der Wert für die hinzugefügten und aktualisierten Entitäten generiert wird, hängen für den Datenbankanbieter verwendet wird.How the value is generated for added and updated entities will depend on the database provider being used. Datenbankanbieter möglicherweise automatisch Wert Generation für bestimmte Eigenschaftentypen 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[] auf generiert festgelegt hinzuzufügen oder zu aktualisieren und markiert als parallelitätstoken, wird Setup mit der rowversion -Datentyp - so, dass die Werte in der Datenbank generiert werden sollen.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. Jedoch, wenn Sie, dass angeben eine DateTime Eigenschaft generiert wird auf hinzuzufügen oder zu aktualisieren, 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 or update, then you must setup a way for the values to be generated. Eine Möglichkeit hierzu ist, so konfigurieren Sie den Standardwert GETDATE() (siehe 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. Klicken Sie dann können einen Trigger auf Datenbankebene Sie zum Generieren von Werten während eines Updates (z. B. das folgende Beispieltrigger).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 werden Primärschlüsseln, die eine ganze Zahl oder eine GUID-Datentyp sind Setup hinzufügen auf generierten Werte aufweisen.By convention, primary keys that are of an integer or GUID data type will be setup to have values generated on add. Alle anderen Eigenschaften werden Setup mit kein Wert generiert werden.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; }
}

Auf generierten Wert hinzufügen (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

Auf diese Weise können nur auf EF wissen, dass die Werte für hinzugefügte Elemente generiert werden, es kann nicht garantiert, dass EF setup wird für den eigentlichen Mechanismus, um Werte zu generieren.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 hinzufügen generierter auf Abschnitt, um weitere Details.See Value generated on add section for more details.

Auf generierten 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

Auf diese Weise können nur auf EF wissen, dass die Werte für hinzugefügte oder aktualisierte Entitäten generiert werden, es kann nicht garantiert, dass EF setup wird für den eigentlichen Mechanismus, um Werte zu generieren.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 generierten Wert hinzufügen oder aktualisieren Abschnitt, um weitere Details.See Value generated on add or update section for more details.

Fluent-APIFluent API

Sie können die Fluent-API verwenden, so ändern Sie das Value-Generation-Muster für eine bestimmte Eigenschaft.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();

Auf generierten Wert hinzufügen (Fluent-API)Value generated on add (Fluent API)

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

Warnung

ValueGeneratedOnAdd()können nur EF wissen, dass die Werte für hinzugefügte Elemente generiert werden, es kann nicht garantiert, dass EF setup wird für den eigentlichen Mechanismus, um Werte zu generieren.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 hinzufügen generierter auf Abschnitt, um weitere Details.See Value generated on add section for more details.

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

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

Warnung

Auf diese Weise können nur auf EF wissen, dass die Werte für hinzugefügte oder aktualisierte Entitäten generiert werden, es kann nicht garantiert, dass EF setup wird für den eigentlichen Mechanismus, um Werte zu generieren.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 generierten Wert hinzufügen oder aktualisieren Abschnitt, um weitere Details.See Value generated on add or update section for more details.