我遇到一个问题,需要我在与我的Core 2.0 MVC Web应用程序相同的项目中创建一个新的Core Console应用程序。在我的MVC应用程序中,我可以通过系统数据上下文轻松连接到我的数据库。但是,当我尝试使用控制台应用程序中的相同代码进行连接时,查询将返回db为null。我在控制台应用程序中引用了我的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;
}
}
控制台应用程序 - 返回db null错误
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!");
}
}
答案 0 :(得分:3)
这是因为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和Console应用程序中引用它也是一个好主意。