【问题标题】:How to get the database context in a controller如何在控制器中获取数据库上下文
【发布时间】:2016-08-20 15:24:50
【问题描述】:
我整天都在想办法在默认 MVC 6 项目的 ManageController.cs 中获取 ApplicationDbContext。
我上网并搜索了很多,但似乎没有人遇到与我相同的问题。这可能很简单,但我无法弄清楚。
有人有想法吗?
这是我尝试过的:
IServiceProvider service = new IServiceProvider();
var _context = service.GetService<ApplicationDbContext>();
【问题讨论】:
标签:
c#
.net
asp.net-core
asp.net-core-mvc
asp.net-mvc-controller
【解决方案1】:
使用构造函数注入:
public class ManageController
{
private readonly ApplicationDbContext _context;
public ManageController(ApplicationDbContext context)
{
_context = context;
}
}
然后您可以在控制器方法中使用_context 对象。文档的Dependency Injection 部分提供了更多信息。
【解决方案2】:
我正在使用 Visual Studio 2015 Update 3。在 Visual Studio 的未来版本中可能不需要以下某些步骤。
使用No Authentification 创建 ASP.NET Core(带有 .NET Core)项目。
在包管理器控制台中,依次执行以下各项。
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Tools -Pre
Install-Package Microsoft.VisualStudio.Web.CodeGenerators.Mvc -Pre
- 将以下内容添加到
project.json 中定义的"tools":{}。
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.0.0-preview2-final",
- 将以下内容添加到
appsettings.json。
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=YourDatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
},
- 将以下内容添加到
startup.cs 中的ConfigureServices,就在services.AddMvc(); 之前。
string connection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<YourContextName>(options => options.UseSqlServer(connection));