EF 7 imposta il valore predefinito iniziale per la colonna DateTime

c# entity-framework-core

Domanda

Devo essere in grado di impostare un valore iniziale della colonna DateTime.

Quando specifico "getutcdate () o DateTime.UtcNow

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

e quindi eseguire dnx . ef migration add InitialMigration EF genera uno snapshot della migrazione con:

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

quando uso DateTime.UtcNow ...

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

e una migrazione iniziale:

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

quando uso DateTime.UtcNow ...

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

Sembrerebbe che debba funzionare, ma quando inserisco i dati nella tabella, il valore predefinito per la colonna è l '"istante" in cui è stato creato il timestamp.

Mi sto perdendo qualcosa?

INOLTRE, dato che, nello stesso senso, come specificare l'IDENTITY SEED in EF7?

Grazie

AGGIORNAMENTO Dopo aver generato lo script sql, con entrambe le opzioni ottengo:

Se si utilizza "getutcdate ()":

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

che non funziona a causa delle citazioni

o se si utilizza DateTime.utcNow:

entity.Property(e => e.ShipDate).DefaultValue("getutcdate()")
entity.Property(e => e.ShipDate).DefaultValue(DateTime.UtcNow)

che spiega il valore statico che stavo ottenendo.

Immagino di poterlo fare con questo. È un bug o esiste un modo corretto per farlo? Grazie

Risposta accettata

Si desidera impostare il valore predefinito SQL, non un valore costante:

entity.Property(e => e.ShipDate).HasDefaultValueSql("getutcdate()");

Risposta popolare

Una soluzione più flessibile che utilizza gli attributi per EF Core:

nel tuo DbContext:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    // Add your customizations after calling base.OnModelCreating(builder);
    CustomDataTypeAttributeConvention.Apply(builder);
    DecimalPrecisionAttributeConvention.Apply(builder);
    SqlDefaultValueAttributeConvention.Apply(builder);
}

e creare queste classi:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    // Add your customizations after calling base.OnModelCreating(builder);
    CustomDataTypeAttributeConvention.Apply(builder);
    DecimalPrecisionAttributeConvention.Apply(builder);
    SqlDefaultValueAttributeConvention.Apply(builder);
}

e attributi personalizzati:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    // Add your customizations after calling base.OnModelCreating(builder);
    CustomDataTypeAttributeConvention.Apply(builder);
    DecimalPrecisionAttributeConvention.Apply(builder);
    SqlDefaultValueAttributeConvention.Apply(builder);
}

Quindi sarai in grado di decorare le proprietà della tabella con uno qualsiasi di questi attributi (o di crearne di personalizzati):

[DecimalPrecision(18, 9)] [SqlDefaultValue("getutcdate()")] [DataType("decimal(18,9)")]




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é