c# - 从 Core 控制台应用程序连接到 Core MVC 应用程序数据上下文

标签 c# asp.net-mvc linq asp.net-core console-application

我遇到一个问题,需要我在与 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/

相关文章:

c# - 使用 firstordefault 时指定的转换无效

c# - 如何针对数据库编写集成测试

c# - 连接到 Entity Framework 中的未知数据库

javascript - 尝试使用 typescript 从 Angular 2 调用 MVC Get Action

c# - 验证码 nuget 包在 ASP.NET MVC 5 上始终有效

c# - 如何最好地将Children of Children的Children遍历到未知的深度?

c# - 具有匿名类型的 linq 表达式中的 TryGetValue()

c# - 重复同时播放30种音效

c# - Excel 单元格中的 OpenXml 和日期格式

c# - 为什么派生类不能用扩展该接口(interface)的类型覆盖基类的接口(interface)类型抽象属性?