ConfigurationManager возвращает ноль при использовании для извлечения строки подключения к базе данных при добавлении миграции - PullRequest
0 голосов
/ 12 апреля 2019

Я использую Entity Framework Core в своем консольном приложении .NET Core. Я храню строку подключения в файле App.config и использую ConfigurationManager в классе контекста для доступа к строке подключения.

Когда я хочу добавить новую миграцию в свой проект, я получаю следующую ошибку:

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

в EF_tut.Context.OnConfiguring (DbContextOptionsBuilder optionsBuilder) в C: \ .. \ Context.cs: строка 12
в Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider ()
в Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService [TService] (фабрика IInfrastructure 1 accessor)<br> at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func 1) в Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (String contextType) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration (Строковое имя, Строковый outputDir, Строковый contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl (имя строки, строка outputDir, строка contextType) в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase. <> c__DisplayClass3_0`1.b__0 () в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (действие Action)

Ссылка на объект не установлена ​​для экземпляра объекта.

Это мой App.config файл:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
         <add name="EfTutDb" 
              connectionString="Data Source=.;Initial Catalog=EF_tut;Integrated Security=True;"/>
    </connectionStrings>
</configuration>

и это мой контекстный класс:

class Context : DbContext
{
    public DbSet<Student> Students { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["EfTutDb"].ConnectionString); // Line 12.
    }
}

Когда я пытаюсь получить строку подключения, используя ConfigurationManger в основном методе, я получаю строку подключения, но когда я добавляю миграцию, я получаю ошибку Null Reference.

1 Ответ

1 голос
/ 13 апреля 2019

Я не совсем уверен, но я думаю, что вы должны исправить строку подключения.Попробуйте это в своем классе:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer("Server=YourPcName\\YourSqlServerName;Database=YourDbName;Trusted_Connection=True;MultipleActiveResultSets=True;");
        }
    }
...