[英]Entity Framework Core with WPF Core - Cannot add migrations
最近我將我的 WPF 應用程序 (.NET 4.7) 遷移到了 .Net Core 3.1。 除了我無法生成/添加 EF Core 遷移之外,大部分工作都很好。
我使用依賴注入在以下帖子的幫助下集成了我的dbContext
/ EF Core:
數據庫連接並正常工作。 但是,當我嘗試通過鍵入以下命令Add-Migration InitialMigration
: Add-Migration InitialMigration
我不斷收到以下錯誤:
無法創建類型為“MyDBContext”的對象。 有關設計時支持的不同模式,請參閱https://go.microsoft.com/fwlink/?linkid=851728
在 Web 應用程序中,這似乎是一個常見/已知問題,可以通過在程序類BuildWebHost
更改為CreateHostBuilder
來BuildWebHost
; https://stackoverflow.com/questions/57745481/unable-to-create-an-object-of-type-mycontext-for-the-different-patterns-suppo
我還通過在options.UseSqlServer
添加MigrationsAssembly
找到了其他一些帖子。
長話短說,我嘗試了所有這些解決方案,但似乎都沒有奏效。 可能是因為我的應用程序不是 Web 應用程序(沒有程序類,例如 BuildWebHost)而是 WPF(核心)應用程序。
我的 WPF 應用程序初始化代碼如下所示:
應用程序.xaml.cs
public partial class App : Application
{
private readonly IHost host;
public IServiceProvider ServiceProvider { get; private set; }
public IConfiguration Configuration { get; private set; }
public App()
{
host = Host.CreateDefaultBuilder()
.ConfigureServices((context, services) =>
{
ConfigureServices(services);
}).Build();
}
private void ConfigureServices(IServiceCollection services)
{
// services for DI...
services.AddDbContext<MyDbContext>
(options =>
options.UseSqlServer(
Configuration.GetConnectionString("SqlConnection")));
services.AddTransient<MainWindow>();
}
protected override void OnStartup(StartupEventArgs e)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
Configuration = builder.Build();
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
ServiceProvider = serviceCollection.BuildServiceProvider();
var mainWindow = ServiceProvider.GetRequiredService<MainWindow>();
mainWindow.Show();
}
protected override async void OnExit(ExitEventArgs e)
{
using (host)
{
await host.StopAsync(TimeSpan.FromSeconds(5));
}
base.OnExit(e);
}
}
MyDbContext.cs
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
Database.Migrate();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Zonnescherm Model
modelBuilder.Entity<Zonneschermen>().Property(e => e.BreedteZonnescherm).HasColumnType("decimal(17,2)");
modelBuilder.Entity<Zonneschermen>().Property(e => e.UitvalDoek).HasColumnType("decimal(17,2)");
modelBuilder.Entity<Zonneschermen>().Property(e => e.ArmLengte).HasColumnType("decimal(17,2)");
// ScreenRegels Model
modelBuilder.Entity<ScreenRegels>().Property(e => e.Breedte).HasColumnType("decimal(17,2)");
modelBuilder.Entity<ScreenRegels>().Property(e => e.Hoogte).HasColumnType("decimal(17,2)");
modelBuilder.Entity<ScreenRegels>().Property(e => e.DraaistangLengte).HasColumnType("decimal(17,2)");
// Seed
modelBuilder.Entity<Instellingen>().HasData(
// seeding...
);
// Seed
modelBuilder.Entity<ZonneschermInstellingen>().HasData(
// seeding...
);
// Seed
modelBuilder.Entity<ScreenInstellingen>().HasData(
// seeding...
);
}
public DbSet<Lamellen> Lamellen { get; set; }
public DbSet<LamellenRegels> LamellenRegels { get; set; }
public DbSet<Zonneschermen> Zonneschermen { get; set; }
public DbSet<ZonneschermInstellingen> ZonneschermInstellingen { get; set; }
public DbSet<Screens> Screens { get; set; }
public DbSet<ScreenRegels> ScreenRegels { get; set; }
public DbSet<ScreenInstellingen> ScreenInstellingen { get; set; }
public DbSet<Instellingen> Instellingen { get; set; }
}
哪里出錯了有什么線索嗎?
剛剛看到這篇文章: WPF with entity framework on net core - 無法創建 AppDbContext 類型的對象
它解決了同樣的問題。 有趣的是,我沒有在我的 DuckDuckGo 搜索引擎中得到這個作為搜索結果,但它是我的谷歌搜索引擎中的第一次命中......
對於 .net core 5(不確定它是否適用於早期版本)
只需將此類添加到您的項目中
public class BloggingContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseSqlServer("your connection string",
options => options.EnableRetryOnFailure());
return new ApplicationDbContext(optionsBuilder.Options);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.