从模型到数据库的路径是什么?

时间:2019-11-01 13:59:09

标签: entity-framework asp.net-core

我有一个从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这样的查询所需的代码是什么?

1 个答案:

答案 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