【发布时间】:2019-08-01 10:49:28
【问题描述】:
我正在使用 ASP.NET Core 2.0 和剃须刀页面。 SQL 表没有主键,我将无法更改 SQL 表。我正在尝试使用存储过程从表中检索数据并在 UI 中显示结果数据。
由于没有可用的主键,我收到错误 - Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidateNonNullPrimaryKeys。我想将代码从 DBSet 移动到 https://www.learnentityframeworkcore.com/raw-sql 中定义的原始 sql 以下是我现有的代码:
//Data - myDbContext
public class MyDbContext : DbContext
{
public DbSet<LOB> lobs { get; set; }
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
}
}
// Model
public class LOB
{
public string Desc { get; set; }
}
//Index.cshtml.cs
public class IndexModel : PageModel
{
private readonly MyDbContext _dbContext;
public IndexModel(MyDbContext dbContext)
{
_dbContext = dbContext;
}
public List<LOB> lOBs { get; set; } = new List<LOB>();
[BindProperty]
public string[] SelectedLOBs { get; set; }
public SelectList LOBOptions { get; set; }
public async Task OnGetAsync()
{
lOBs = await _dbContext.Set<LOB>().FromSql(
"EXECUTE sp")
.AsNoTracking()
.ToListAsync();
LOBOptions = new SelectList(lOBs, "Desc1");
}
}
// Index.cshtml
<select class="form-control" required multiple id="selLOB" asp-for="SelectedLOBs" asp-items="Model.LOBOptions"></select>
如何使用 context.database 属性填充下拉列表? 谢谢
【问题讨论】:
-
看起来你需要使用查询类型:learnentityframeworkcore.com/query-types
-
嗨。我正在使用 ASP.NET 2.0,并且从 2.1 开始使用查询类型
-
查询类型与您使用的 ASP.NET Core 版本无关。它们属于 Entity Framework Core。
-
嗨,迈克。在链接中 - 第一条语句说 - 此功能已添加到 EF Core 2.1 中。我正在使用 2.0
-
要么升级到 2.1,要么您可以回退到使用 ADO.NET 并自己将数据转换为 LOB 实例的集合。您可以在链接到的页面末尾看到如何使用 ADO.NET。