Wygenerowany wartościGenerated Values

Wartość wzorców generowaniaValue Generation Patterns

Istnieją trzy wzorców generowania wartości, które mogą być używane dla właściwości.There are three value generation patterns that can be used for properties.

Generowanie nie wartościNo value generation

Generowanie wartości nie oznacza, że będzie zawsze podać prawidłową wartość do zapisania w bazie danych.No value generation means that you will always supply a valid value to be saved to the database. To nieprawidłowa wartość muszą być przypisane do nowych jednostek zanim zostaną one dodane do kontekstu.This valid value must be assigned to new entities before they are added to the context.

Dodaj wartość wygenerowaną naValue generated on add

Wartość wygenerowana na dodawanie oznacza, że generowany wartość dla nowych jednostek.Value generated on add means that a value is generated for new entities.

W zależności od używanego dostawcy bazy danych wartości mogą być generowane po stronie klienta EF lub w bazie danych.Depending on the database provider being used, values may be generated client side by EF or in the database. Jeśli wartość jest generowany przez bazę danych, następnie EF może przypisać wartości tymczasowej po dodaniu jednostkę do kontekstu.If the value is generated by the database, then EF may assign a temporary value when you add the entity to the context. Tej wartości tymczasowej następnie zostanie zastąpiony wartością generowany przez bazę danych podczas SaveChanges().This temporary value will then be replaced by the database generated value during SaveChanges().

Jeśli dodasz jednostkę do kontekstu, który ma wartość przypisana do właściwości EF będzie podejmować próby wstawienia tej wartości, a nie generuje nowy.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. Właściwość została uznana za wartość przypisane, jeśli nie jest przypisany CLR wartość domyślna (null dla string, 0 dla int, Guid.Empty dla Guiditp.).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.). Aby uzyskać więcej informacji, zobacz jawnej wartości dla właściwości wygenerowanego.For more information, see Explicit values for generated properties.

Ostrzeżenie

Jak jest generowany wartości dla jednostek dodano będzie zależeć od używany dostawca bazy danych.How the value is generated for added entities will depend on the database provider being used. Dostawcy bazy danych może automatycznie skonfigurować Generowanie wartości dla niektórych typów właściwości, ale inne może wymagać można skonfigurować ręcznie, jak jest generowany wartość.Database providers may automatically setup value generation for some property types, but others may require you to manually setup how the value is generated.

Na przykład, korzystając z programu SQL Server, wartości będą automatycznie generowane dla GUID właściwości (przy użyciu algorytmu GUID sekwencyjnych programu SQL Server).For example, when using SQL Server, values will be automatically generated for GUID properties (using the SQL Server sequential GUID algorithm). Jednak jeśli użytkownik określi, że DateTime właściwości jest generowany na dodać, a następnie należy skonfigurować to rozwiązanie dla wartości do wygenerowania.However, if you specify that a DateTime property is generated on add, then you must setup a way for the values to be generated. Jest jeden ze sposobów, aby skonfigurować domyślną wartość GETDATE(), zobacz wartości domyślne.One way to do this, is to configure a default value of GETDATE(), see Default Values.

Wartość wygenerowana na dodania lub zaktualizowaniaValue generated on add or update

Wartość wygenerowana przy dodawaniu lub aktualizacji oznacza, że nowa wartość jest generowany za każdym razem, gdy zapisaniu rekordu (insert lub update).Value generated on add or update means that a new value is generated every time the record is saved (insert or update).

Podobnie jak value generated on add, jeśli określono wartości dla właściwości dla nowo dodanego wystąpienia jednostki, że wartość zostanie wstawiony zamiast wartości generowany.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. Istnieje również możliwość ustawienia jawną wartość podczas aktualizowania.It is also possible to set an explicit value when updating. Aby uzyskać więcej informacji, zobacz jawnej wartości dla właściwości wygenerowanego.For more information, see Explicit values for generated properties.

Ostrzeżenie

Jak jest generowany wartości dla jednostek dodany i zaktualizowane będzie zależeć od używany dostawca bazy danych.How the value is generated for added and updated entities will depend on the database provider being used. Dostawcy bazy danych może automatycznie Instalator Generowanie wartości dla niektórych typów właściwości, a inne będzie można skonfigurować ręcznie, jak wartość jest generowany wymagają.Database providers may automatically setup value generation for some property types, while others will require you to manually setup how the value is generated.

Na przykład w przypadku korzystania z programu SQL Server byte[] właściwości, które są ustawione, tak jak w dodać lub zaktualizować i oznaczone jako tokeny współbieżności będzie Instalatorowi rowversion typów danych - tak, aby wartości zostaną wygenerowane w bazie danych.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. Jednak jeśli użytkownik określi, że DateTime właściwości jest generowany na dodać lub zaktualizować, a następnie należy skonfigurować to rozwiązanie dla wartości do wygenerowania.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. Jest jeden ze sposobów, aby skonfigurować domyślną wartość GETDATE() (zobacz wartości domyślne) do generowania wartości dla nowych wierszy.One way to do this, is to configure a default value of GETDATE() (see Default Values) to generate values for new rows. Następnie można użyć wyzwalacza bazy danych do generowania wartości podczas aktualizacji (na przykład następujący przykład wyzwalacz).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

KonwencjeConventions

Według Konwencji jest liczbą całkowitą lub identyfikator GUID typu danych kluczy podstawowych będzie Instalatora wartościami wygenerowany na Dodaj.By convention, primary keys that are of an integer or GUID data type will be setup to have values generated on add. Wszystkie inne właściwości będzie Instalatora nie generacji wartość.All other properties will be setup with no value generation.

Adnotacji danychData Annotations

Generowanie nie wartości (adnotacji danych)No value generation (Data Annotations)

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

Wartość wygenerowana na dodawanie (adnotacji danych)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; }
}

Ostrzeżenie

Umożliwia to po prostu EF wiedzieć, czy wartości są generowane dla jednostek dodany, nie gwarantuje, że EF umożliwią skonfigurowanie konkretny mechanizm do generowania wartości.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. Zobacz dodać wartość wygenerowaną na sekcji, aby uzyskać więcej informacji.See Value generated on add section for more details.

Dodaj wartość wygenerowaną na lub aktualizacji (adnotacji danych)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; }
}

Ostrzeżenie

Umożliwia to po prostu EF wiedzieć, czy wartości są generowane dla jednostek dodane lub zaktualizowane, nie gwarantuje, że EF umożliwią skonfigurowanie konkretny mechanizm do generowania wartości.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. Zobacz wartość wygenerowaną na dodania lub zaktualizowania sekcji, aby uzyskać więcej informacji.See Value generated on add or update section for more details.

Interfejsu API FluentFluent API

Aby zmienić wzorzec generowania wartości dla danej właściwości można Użyj interfejsu API Fluent.You can use the Fluent API to change the value generation pattern for a given property.

Generowanie nie wartości (interfejsu API Fluent)No value generation (Fluent API)

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

Wartość wygenerowana na dodawanie (interfejsu API Fluent)Value generated on add (Fluent API)

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

Ostrzeżenie

ValueGeneratedOnAdd()po prostu umożliwia EF wiedzieć, czy wartości są generowane dla jednostek dodany, nie gwarantuje, że EF umożliwią skonfigurowanie konkretny mechanizm do generowania wartości.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. Zobacz dodać wartość wygenerowaną na sekcji, aby uzyskać więcej informacji.See Value generated on add section for more details.

Dodaj wartość wygenerowaną na lub aktualizacji (interfejsu API Fluent)Value generated on add or update (Fluent API)

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

Ostrzeżenie

Umożliwia to po prostu EF wiedzieć, czy wartości są generowane dla jednostek dodane lub zaktualizowane, nie gwarantuje, że EF umożliwią skonfigurowanie konkretny mechanizm do generowania wartości.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. Zobacz wartość wygenerowaną na dodania lub zaktualizowania sekcji, aby uzyskać więcej informacji.See Value generated on add or update section for more details.