Come configurare la colonna Identità chiave in Entity Framework 7?

entity-framework-core

Domanda

Ho il seguente mapper in Entity Framework 7 RC1 :

  b.ToTable("Categories");
  b.HasKey(x => x.Id);
  b.Property(x => x.Id) ... ??

Come rendere la colonna Id e Identity in EF 7 RC1?

L'equivalente SQL è:

Id int identity not null

Ho letto che sarebbe come questo:

b.Property(x => x.Id).ForSqlServer().UseIdentity();

Ma in EF7 RC1 non trovo ForSqlServer (). Trovo:

.ForSqlServerHasComputedSql()
.ForSqlServerHasColumnName()
.ForSqlServerHasColumnNameType()
.ForSqlServerHasDefaultValue()
.ForSqlServerHasDefaultValueSql()
.ForSqlServerUseSequenceHiLo()
...

Risposta accettata

Puoi configurare esplicitamente una colonna Identity chiamando.

b.Property(x => x.Id).UseSqlServerIdentityColumn();

Vale anche la pena notare che l'identità è il modello di generazione del valore predefinito utilizzato con le chiavi primarie. L'uso delle sequenze è opt-in.


Risposta popolare

La risposta fornita da natemcmaster è corretta. È possibile definire con fluentAPI oppure è possibile utilizzare anche Data [Key] per definire la chiave primaria.

Tuttavia ci sono un paio di modi per definire il valore dell'identità in EF Core. Puoi usare identity (default), Sequence e HiLo Pattern con Sequence. L'identità è predefinita. In effetti non è necessario definirlo come colonna di identità se il nome della tua proprietà termina con Id o <typeName> Id. EF Core per convenzione configura una proprietà denominata Id o <typeName> Id come chiave di un'entità.

E il motivo per cui il nome del metodo di estensione inizia da ForSqlServer è che, EF Core supporta molti provider di database. E le funzionalità per questi provider sono leggermente diverse, quindi puoi specificare un comportamento diverso per la stessa proprietà a seconda del provider utilizzato.

Si prega di leggere questi articoli per saperne di più sull'uso di Sequcence con EF Core e HiLo con core EF .




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché