Mi piacerebbe avere una colonna CreatedDate
nel mio Accounts
tavolo, definito come segue:Come utilizzare il database predefinito per la colonna CreatedDate in EF code-first 4.3?
CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE()
Ciò mappare a una proprietà CreatedDate nella classe:
public class Account
{
public DateTime? CreatedDate { get; private set; }
// ... other properties ...
}
Quando si crea un nuovo account Mi piacerebbe lasciare CreatedDate impostato su NULL e lasciare che sia il database a riempirlo. Quando carico un account esistente dal DB, vorrei che EF recuperi il CreatedDate generato dal database.
Sto utilizzando EF 4.3 code-first con migrazioni esplicite. Quando EF generato una migrazione di tabella Conti, ho modificato come segue:
CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
Sfortunatamente, quando si tenta di mappare la tabella utilizzando EF 4.3, EF tenta di inserire il valore NULL nella colonna CreatedDate.
Ho provato a impostare DatabaseGeneratedOption.Identity per la proprietà, as suggested by Ladislav Mrnka. Tuttavia, ciò rimuove l'opzione di identità dalla proprietà della chiave primaria. Ho provato a utilizzare DatabaseGeneratedOption.Computed invece, ma continua a provare a inserire un NULL. Ho ripristinato tutte le migrazioni e le rieseguo - il problema si verifica ancora.
Ecco quello che sto facendo in OnModelCreating
:
modelBuilder.Entity<Account>().Property(a => a.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
Qualcuno ha qualche suggerimento?
Grazie per il vostro aiuto,
Richard
Grazie Ladislav! Funziona. Ho contrassegnato CreatedDate e la mia colonna ID sia con DatabaseGeneratedOption.Identity. L'ho lasciato come nullable nella mia entità e non annullabile nel DB - ma con l'opzione Identity, non sta più inserendo il NULL esplicito. –