Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az EF Core Tools egyes parancsai (például a Migrálási parancsok) megkövetelik , hogy a tervezéskor származtatott DbContext példányt hozhasson létre az alkalmazás entitástípusairól és az adatbázisséma leképezésének módjáról. A legtöbb esetben kívánatos, hogy az DbContext így létrehozott konfigurálás a futásidőben történő konfigurálás módjához hasonlóan legyen konfigurálva.
Az eszközök többféleképpen próbálják létrehozni a következőt DbContext:
Alkalmazásszolgáltatásokból
Ha az indítási projekt a ASP.NET Core Web Host vagy a .NET Core Generic Gazdagépet használja, az eszközök megpróbálják beszerezni a DbContext objektumot az alkalmazás szolgáltatójától.
Az eszközök először megpróbálják beolvasni a szolgáltatót a tulajdonság meghívásával Program.CreateHostBuilder(), hívásával Build(), majd elérésével Services .
public class Program
{
public static void Main(string[] args)
=> CreateHostBuilder(args).Build().Run();
// EF Core uses this method at design time to access the DbContext
public static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(
webBuilder => webBuilder.UseStartup<Startup>());
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
=> services.AddDbContext<ApplicationDbContext>();
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
Note
Új ASP.NET Core-alkalmazás létrehozásakor a rendszer alapértelmezés szerint ezt a horgot tartalmazza.
Magát DbContext és a konstruktorban lévő függőségeket szolgáltatásként kell regisztrálni az alkalmazás szolgáltatójában. Ez könnyen megvalósítható, ha egy konstruktort használ az DbContext argumentumként használt példányonDbContextOptions<TContext>, és használja a metódustAddDbContext<TContext>.
Konstruktor használata paraméterek nélkül
Ha a DbContext nem kérhető le az alkalmazásszolgáltatótól, az eszközök a projekten belül keresik a származtatott típust DbContext . Ezután megpróbálnak létrehozni egy példányt paraméterek nélküli konstruktor használatával. Ez lehet az alapértelmezett konstruktor, ha a DbContext metódussal OnConfiguring van konfigurálva.
Tervező-idő gyárból
A dbContext létrehozásához szükséges eszközöket a felület implementálásával Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory<TContext> is megadhatja: Ha az interfészt megvalósító osztály vagy ugyanabban a projektben található, mint a származtatott DbContext vagy az alkalmazás indítási projektje, az eszközök megkerülik a DbContext létrehozásának egyéb módjait, és ehelyett a tervezési idejű gyárat használják.
public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
{
public BloggingContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
optionsBuilder.UseSqlite("Data Source=blog.db");
return new BloggingContext(optionsBuilder.Options);
}
}
A tervezési idő gyár különösen akkor lehet hasznos, ha a tervezési időt eltérően kell konfigurálnia DbContext , mint a futásidőben, ha a DbContext konstruktor további paramétereket vesz fel a DI-ben, ha egyáltalán nem használ DI-t, vagy ha valamilyen okból nem szeretne metódust CreateHostBuilder használni a ASP.NET Core-alkalmazás Main osztályában.
Args
Mindkettőt IDesignTimeDbContextFactory<TContext>.CreateDbContext , és Program.CreateHostBuilder fogadja el a parancssori argumentumokat.
Ezeket az argumentumokat az eszközökből adhatja meg:
dotnet ef database update -- --environment Production
A -- jogkivonat arra utasítja dotnet ef-et, hogy az utána következőket argumentumként kezelje, és ne próbálja meg opciókként elemezni őket. A dotnet ef által nem használt további argumentumokat a rendszer továbbítja az alkalmazásnak.