Ehi, ho appena iniziato a utilizzare il core EF e tutto funziona correttamente. Chiamo il metodo context.Database.Migrate()
e crea un database. Ma anche se il mio oggetto di contesto ha un DBSet<T>
, non crea alcuna tabella ad eccezione della cronologia di migrazione.
Qualcuno può aiutarmi con questo problema?
context.Database.Migrate()
per sé non genera migrazioni . Invece, elabora le migrazioni create.
Per ogni modifica del database, è necessario chiamare Add-Migration {sensibleName}
.
La classe di avvio continuerà a chiamare context.Database.Migrate()
che controllerà il database ed elaborerà le migrazioni in sospeso.
Ad esempio, una volta creato il database, una regola generale è chiamare Add-Migration Initial
. Chiamando context.Database.Migrate()
una volta verificherà il database esistente, lo creerà se non lo è, verificherà se viene applicata la migrazione Initial
e lo applicherà in caso contrario.
Se si chiama Add-Migration SmallChange
, lo stesso accadrà all'avvio successivo, in modo simile al seguente:
La tua prima migrazione dovrebbe apparire un po 'come questa:
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "HelloWorld",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
MyString = table.Column<string>(nullable: true),
});
}
}
Se la migrazione non è così, è possibile che DbContext
non sia configurato correttamente. Se le tabelle non vengono ancora applicate, provare a eseguire l'aggiornamento del database dalla console di Gestione pacchetti e vedere cosa sta succedendo esattamente con Update-Database -Verbose
Ho fatto il seguente e funziona: