我有一个从VS中的ASP.NET Core Web应用程序模板创建的项目。运行时,项目将创建一个数据库来支持Identity包。
Identity软件包是Razor类库。我已经搭建好脚手架,可以看到模型了。这些模型是从Microsoft.AspNetCore.Mvc.RazorPages.PageModel
进行子分类的。
我正在跟踪代码,以尝试更好地理解它们的工作原理。我正在尝试查找从模型到物理数据库的路径。
在文件appsettings.json
中,我看到了指向物理数据库的连接字符串DefaultConnection
。
在startup.cs
中,我看到了对连接字符串DefaultConnection
的引用:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
此后,我迷路了。我找不到从代码中的模型到数据库表的链接。进行类似select * from AspNetUsers
这样的查询所需的代码是什么?
答案 0 :(得分:0)
按照@Daniel Schmid的建议,您首先应该学习Dependency injection in ASP.NET Core。
ASP.NET Core具有出色的依赖注入功能,该框架可通过该功能为您提供所需的任何类的对象。因此,您不必在代码中手动创建类对象。
EF Core支持将DbContext
与依赖项注入容器一起使用。您可以使用DbContext
方法将您的AddDbContext<TContext>
类型添加到服务容器中。
然后您可以使用实例:
public class MyController
{
private readonly ApplicationDbContext _context;
public MyController(ApplicationDbContext context)
{
_context = context;
}
...
}
或直接使用ServiceProvider,这种情况不太常见:
using (var context = serviceProvider.GetService<ApplicationDbContext>())
{
// do stuff
}
var options = serviceProvider.GetService<DbContextOptions<ApplicationDbContext>>();
并通过直接查询数据库来吸引用户:
var users = _context.Users.ToList();
也请阅读this article。