我遇到一个问题,需要我在与 Core 2.0 MVC Web 应用程序相同的项目中创建一个新的 Core Console 应用程序。在我的 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!");
}
}
最佳答案
这是因为 MVC Core 正在正确配置依赖项注入(inject),这与控制台应用程序相反。
在控制台应用程序中,您可以使用以下命令手动实例化 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
。
It would be also a good idea to put your
DbContext
in a class library project, and reference it from both the MVC and Console apps.
关于c# - 从 Core 控制台应用程序连接到 Core MVC 应用程序数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50828592/