۲ سال قبل، دوشنبه ۱۰ مرداد ۱۴۰۱، ساعت ۲۱:۴۶
۷ سال و ۱ ماه قبل، چهارشنبه ۲۵ مرداد ۱۳۹۶، ساعت ۱۴:۰۴
با سلام و احترام
قسمت آخر مقاله یعنی قطعه کد
راه حل استانداردی نمیباشد و البته که با این حال نیاز به تکمیل شدن دارد به این شکل که باید در فایل startup.cs از تنظیم اضافه شده یعنی
جهت جلوگیری از Initial شدن دیتابیس در هنگام استفاده از Entity Framework Core Tooling به طور مثال عملیات Migration استفاده کرد
در ادامه روش توصیه شده توسط مایکروسافت پیاده سازی اینترفیس جدید IDesignTimeDbContextFactory میباشد که به واسطه آن EF موفق به یافتن Context برنامه در هنگام عملیات Migration میشود.قطعه کد زیر نمونه ای از این پیاده سازی است.
البته همه این موارد زمانی درست کار خواهد کرد که فایل Program.cs برنامه را نیز به شکل جدید آن یعنی
تغییر دهیم.دلیل آن هم ... EF Core 2.0: design-time DbContext discovery
قسمت آخر مقاله یعنی قطعه کد
// Only used by EF Tooling public static IWebHost BuildWebHost(string[] args) { return WebHost.CreateDefaultBuilder() .ConfigureAppConfiguration((ctx, cfg) => { cfg.SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", true) // require the json file! .AddEnvironmentVariables(); }) .ConfigureLogging((ctx, logging) => { }) // No logging .UseStartup() .UseSetting("DesignTime", "true") .Build(); }
UseSetting("DesignTime", "true")
if (_config["DesignTime"] != "true") { using (var scope = app.ApplicationServices.CreateScope()) { var initializer = scope.ServiceProvider.GetRequiredService<YourSampleDataInitializer>(); initializer.RunAsync().Wait(); } }
public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext> { public BloggingContext Create(string[] args) { var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>(); optionsBuilder.UseSqlite("Data Source=blog.db"); return new BloggingContext(optionsBuilder.Options); } }
public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build();