Подключение к контексту данных приложения Core MVC из приложения консоли Core - PullRequest
0 голосов
/ 13 июня 2018

У меня есть проблема, которая требует от меня создания нового приложения Core Console в том же проекте, что и мое Core 2.0 MVC Web Application.В моем приложении MVC я могу легко подключиться к своей базе данных через системный контекст данных.Однако, когда я пытаюсь подключиться, используя тот же код в моем консольном приложении, запрос вернет, что база данных равна нулю.Я ссылался на свой проект MVC в консольном приложении, но не повезло.Заранее спасибо.См. Ниже:

Контекст данных

public class SystemDataContext : DbContext
{
    public SystemDataContext(DbContextOptions<SystemDataContext> options)
        : base(options)
    { }

    public DbSet<Facility> Facility { get; set; }
}

MVC - Работает

public class FacilityService
{
    private SystemDataContext db;
    public FacilityService(SystemDataContext dataBase)
    {
        db = dataBase;
    }

    public List<Facility> GetFacilities()
    {
        var facilities = db.Facility.ToList();
        return facilities;
    }
}

Консольное приложение- возвращает дб нулевую ошибку

public class Program
{
    private SystemDataContext db;
    public Program(SystemDataContext dataBase)
    {
        db = dataBase;
    }

    public static void Main(string[] args)
    {

        var facilities = db.Facility.ToList();

        Console.WriteLine("Hello World!");
    }
}

1 Ответ

0 голосов
/ 13 июня 2018

Это потому, что MVC Core правильно настраивает внедрение зависимостей, в отличие от консольного приложения.

В вашем консольном приложении вы можете создать экземпляр DbContext вручную, используя это:

var builder = new ConfigurationBuilder()
              .SetBasePath(Directory.GetCurrentDirectory())
              .AddJsonFile("appsettings.json");

var configuration = builder.Build();
var optionsBuilder = new DbContextOptionsBuilder<SystemDataContext>();
optionsBuilder.UseSqlServer(configuration.GetConnection("DefaultConnection"));
var db = new SystemDataContext(optionsBuilder.Options);

В консольном приложении также должен быть appsettings.json со строками соединения.

Было бы также неплохо поместить ваш DbContext в проект библиотеки классов, иссылаться на него из MVC и консольных приложений.

...