【问题标题】:Error in Migration (DBCONTEXT File) in EF CodeFirst for NetCore for WinformsEF Code First for Net Core for Winforms 中的迁移错误(DBCONTEXT 文件)
【发布时间】: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


【解决方案1】:

我在Karen Payne 示例的帮助和Guru Stron 的支持下解决了这个问题。谢谢!!

问题出在 OnConfiguring 方法中,因为出于任何原因,方法 UseSqlServer 中的 ConnectionString 为 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);
        }

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2018-01-15
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多