C# 从核心控制台应用程序连接到核心MVC应用程序数据上下文

C# 从核心控制台应用程序连接到核心MVC应用程序数据上下文,c#,asp.net-mvc,linq,asp.net-core,console-application,C#,Asp.net Mvc,Linq,Asp.net Core,Console Application,我有一个问题,需要在与我的核心2.0 MVC Web应用程序相同的项目中创建一个新的核心控制台应用程序。在我的MVC应用程序中,我可以通过系统数据上下文轻松地连接到数据库。但是,当我尝试在控制台应用程序中使用相同的代码进行连接时,查询将返回db为null。我已经在控制台应用程序中引用了我的MVC项目,但运气不好。提前谢谢。请参阅下文: 数据上下文 public class SystemDataContext : DbContext { public SystemDataContext(D

我有一个问题,需要在与我的核心2.0 MVC Web应用程序相同的项目中创建一个新的核心控制台应用程序。在我的MVC应用程序中,我可以通过系统数据上下文轻松地连接到数据库。但是,当我尝试在控制台应用程序中使用相同的代码进行连接时,查询将返回db为null。我已经在控制台应用程序中引用了我的MVC项目,但运气不好。提前谢谢。请参阅下文:

数据上下文

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

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

这是因为MVC核心正确地配置了依赖注入,与控制台应用程序相反

在控制台应用程序中,您可以使用以下命令手动实例化
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);
var builder=new ConfigurationBuilder()
.SetBasePath(目录.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”);
var configuration=builder.Build();
var optionsBuilder=new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(configuration.GetConnection(“DefaultConnection”));
var db=新的SystemDataContext(optionsBuilder.Options);
您的控制台应用程序中也应该有带有连接字符串的
appsettings.json

DbContext
放在类库项目中,并从MVC和控制台应用程序中引用它也是一个好主意


MVC应用程序正在运行,因为您可能已经设置了依赖项注入。在控制台中,您应该创建一个新实例或设置依赖项注入。您不应该这样做
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!");
    }
}
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);