等待 _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需要关心我如何设置OutputAccessRights
在 OnGet
方法上,只需在 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...
}
}
基于
我已经像这样编辑了我的 .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需要关心我如何设置OutputAccessRights
在 OnGet
方法上,只需在 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...
}
}