【发布时间】:2020-09-27 22:23:16
【问题描述】:
我在 NET Framework (Winforms) 和 NET Core (Web) 中使用 EF CodeFirt 没有问题。
但使用 EF CodeFirst 时,我在抛出新迁移时出错:
System.NullReferenceException:对象引用未设置为对象的实例。 在 C:\xxx\xxx\xxx\xxx\xxx\xxx\Data\AppDbContext.cs:line 29 中的 Data.AppDbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder) 处
<connectionStrings>
<add name="AppDbContext" connectionString="<ConnectionString>"/>
</connectionStrings>
APPDBCONTEXT
public class AppDbContext : DbContext
{
public DbSet<Unit> Units { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["AppDbContext"].ConnectionString);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfiguration(new UnitConfiguration());
}
}
因为是WINFORMS不存在STARTUP.CS或者APPSETTINGS.JSON来配置服务,所以不知道怎么办。
我在网络上尝试了许多搜索和许多解决方案,但错误仍然存在。
【问题讨论】:
-
你检查过
ConfigurationManager.ConnectionStrings["AppDbContext"]实际上返回ConnectionStringSettingsCollection吗? -
问题不是 NullReferenceException 因为错误是参数 optionsBuilder
-
是的,我验证了 ConfigurationManager.ConnectionStrings["AppDbContext"] 并且来自 APP.CONFIG 的值是正确的
-
如何初始化/创建上下文?我无法在简单的控制台应用程序中重现这种行为。可以加
Unit类和UnitConfiguration吗? -
初始化我认为是问题的上下文。在带有 NetFramework 的 Winforms 中是在构造函数中;在带有 Net Core 的 web 中是在 Startup (ConfigureServices) 但在带有 Net Core 的 WinForms 中我不知道在哪里做。显然,在构造函数中使用字符串或使用 Configure Service 方法是不可能的。
标签: c# winforms .net-core entity-framework-core dbcontext