等待 _context 时出错:"cannot reference a type through an expression"

Error in await _context: "cannot reference a type through an expression"

基于

我已经像这样编辑了我的 .cs:

private readonly GroupAccessDetailsModel _context;
public GroupAccessDetailsModel(GroupAccessDetailsModel context)
{
    _context = context;
}
[BindProperty]
public IList<OutputAccessRights> UsersAccessRights { get; set; }

public async Task<IActionResult> OnGetAsync()
{
    UsersAccessRights = await _context.OutputAccessRights.ToListAsync();

    if (UsersAccessRights == null)
    {
        return NotFound();
    }
    return Page();
}

型号:

 public class OutputAccessRights
{
    public int Id { get; set; }
    public bool ChkUserAccessRights { get; set; }
    public string SubMenuDescription { get; set; }
    public string MainMenuDescription { get; set; }
    public bool ChkAddRight { get; set; }
}

但我的问题是 await _context.OutputAccessRights.ToListAsync()。

错误:无法通过表达式引用类型

我试过用 await _context.GroupAccessDetailsModel.OutputAccessRights.ToListAsync(); 替换它但它没有用。知道如何解决这个问题吗?

Error: cannot reference a type through an expression.

那是因为您使用的是模型而不是 DbContext。

您需要先学习如何使用Entity Framework Core:

然后你就可以按照教程Razor Pages with Entity Framework Core

OnGet方法中的以下代码用于显示所有OutputAccessRights数据。

UsersAccessRights = await _context.OutputAccessRights.ToListAsync();

上一个帖子的issue is not able to pass the select checkbox list.It表示可以显示数据,但无法将select checkbox传递给OnPost .

我做的Edit.cshtml.cs是测试OnPost方法是否可以获取列表复选框或者not.No需要关心我如何设置OutputAccessRightsOnGet 方法上,只需在 OnGet 方法上使用您之前的代码。

下面是关于如何使用 EF Core 的完整代码:

1.DbContext(_context.OutputAccessRights 来自这里):

public class RazorContext : DbContext
{
    public RazorContext (DbContextOptions<RazorContext> options)
        : base(options)
    {
    }
    public DbSet<OutputAccessRights> OutputAccessRights { get; set; }
}

2.appSettings.json(这里我使用visual studio中默认的sql服务器):

"ConnectionStrings": {
   "ConnectionName": "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
 }

3.Startup.cs:

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddDbContext<RazorContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("ConnectionName")));
}

4.Run 包 Nuget 管理器上的命令行:

PM>add-migration init
PM>update-database

5.Then你可以设置数据:

public class EditModel : PageModel
{
    private readonly RazorContext _context;

    public EditModel(RazorContext context)
    {
        _context = context;
    }

    [BindProperty]
    public IList<OutputAccessRights> UsersAccessRights { get; set; }

    public async Task<IActionResult> OnGetAsync()
    {
        UsersAccessRights = await _context.OutputAccessRights.ToListAsync();//set the data to UsersAccessRights
        return Page();
    }


    public async Task<IActionResult> OnPostAsync(IList<OutputAccessRights> usersAccessRights)
    {
        //do your stuff...
    }
}