【问题标题】:Connect to Core MVC application data context from Core console application从 Core 控制台应用程序连接到 Core MVC 应用程序数据上下文
【发布时间】:2018-06-13 03:15:39
【问题描述】:

我有一个问题需要我在与我的 Core 2.0 MVC Web 应用程序相同的项目中创建一个新的 Core Console 应用程序。在我的 MVC 应用程序中,我可以通过系统数据上下文轻松连接到我的数据库。但是,当我尝试在控制台应用程序中使用相同的代码进行连接时,查询将返回 db 为空。我在控制台应用程序中引用了我的 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!");
    }
}

【问题讨论】:

  • MVC 应用程序正在运行,因为您可能已经设置了依赖注入。在控制台中,您应该创建一个新实例或设置依赖注入。
  • 你不应该这样做

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


【解决方案1】:

这是因为 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 和控制台应用程序中引用它也是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2020-04-14
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多