我在.NET Framework (Winforms)和.NET Core (Web)中使用EF CodeFirt没有问题。
但在EF CodeFirst中,当我进行新的迁移时,出现了一个错误。
System.NullReferenceException.Object reference not set to an instance of an object: 在Data.AppDbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder) in C:xxx/xxx/xxx/xxx/xxx/xxx/Data/AppDbContext.cs:第29行。
<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来配置服务,我不知道该怎么办。
我尝试了许多搜索和许多解决方案在网络上,但错误持续。
我解决了这个问题,帮助 Karen Payne 样品和支持 Guru Stron. 谢谢!!。
问题是在OnConfiguring方法,因为任何原因的连接字符串在方法UseSqlServer都是NULL。
如果我在windows下从APP.CONFIG文件中读取的值是正确的,但是在OnConfiguring方法中是NULL。
解决方案(不是最好的解决方案)是使用一个字符串的ConnectionString参数和迁移工作。
现在等待从APP.CONFIG文件中读取ConnectionString参数并完成DbContext类。
附上代码
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; //
string connectionString = "Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=REF_SIGIPRO;Integrated Security=SSPI;";
if (!optionsBuilder.IsConfigured)
optionsBuilder.UseSqlServer(connectionString);
}