Ho tre livelli di applicazione in Asp.net Mvc Core e utilizzo core EF, ora voglio creare la migrazione automatica,
ho il livello DAL che il mio contesto disponibile qui
public class AdminContext : DbContext
{
public AdminContext(DbContextOptions<AdminContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<AdsAdsCategory>()
.HasKey(bc => new { bc.AdsId, bc.AdsCategoryId });
modelBuilder.Entity<AdsAdsCategory>()
.HasOne(bc => bc.Ads)
.WithMany(b => b.AdsAdsCategories)
.HasForeignKey(bc => bc.AdsId);
modelBuilder.Entity<AdsAdsCategory>()
.HasOne(bc => bc.Category)
.WithMany(c => c.AdsAdsCategories)
.HasForeignKey(bc => bc.AdsCategoryId);
}
public DbSet<Ads> Adses { get; set; }
public DbSet<AdsCategory> AdsCategories { get; set; }
public DbSet<AdsPosition> AdsPositions { get; set; }
public DbSet<AdsCustomer> AdsCustomers { get; set; }
}
e nella mia applicazione di avvio
scrivo questo codice
var context = app.ApplicationServices.GetService<AdminContext>();
if (!context.Database.EnsureCreated())
context.Database.Migrate();
quando lancio il database dell'applicazione è stato creato e la tabella è stata generata ma __migrationhistory non esiste e la migrazione non viene generata,
quando in avvio rimuovo questo codice linea
if (!context.Database.EnsureCreated())
il database è stato creato e la tabella __migrationhistory è stata generata, ma la tabella del modello non viene generata,
come posso risolvere questo problema? ed eseguire la migrazione automatica in EF Core in un'applicazione a tre livelli?
La migrazione automatica come in EF6 non esiste nel core EF. È necessario generare le migrazioni prima di iniziare e quindi utilizzarle
context.Database.Migrate();
o si rilascia l'intero database su ogni avvio e utilizzo
context.Database.EnsureCreated();
ricreare il database aggiornato. Il secondo non consente di aggiungere ulteriori migrazioni in seguito, quindi è necessario ricreare l'intero database ogni volta. Per cancellare il database che puoi usare
context.Database.EnsureDeleted();
È necessario effettuare le seguenti operazioni per abilitare la migrazione in MVC .NET Core.
1-aprire la console di Gestione pacchetti in Visual Studio. Digita ed esegui questo codice.
add-migrazione ClassName
pm> add-migration FirstInitialize
2-Dopo aver eseguito il codice, verranno create le classi di migrazione per i tuoi modelli
public partial class FirstInitialize : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
//After executing the code, this section will be automatically generated for your models
}
}
3-Quindi, con il seguente codice inserito nella sezione di classe del metodo principale program.cs, i modelli verranno incorporati in un database.
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<YouDbContext>();
context.Database.Migrate();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the atabase.");
}
}
4-Ogni volta che cambi i tuoi modelli o ne aggiungi uno nuovo, devi ripetere i passaggi. Scegli un nuovo nome per la tua migrazione ogni volta. Campione:
pm> add-migration SecondInitialize
* Non so parlare bene l'inglese