实体类型“Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup”需要定义一个主键

coo*_*and 4 asp.net entity-framework asp.net-core

.Net 核心的新手。

尝试实现类似于以下内容的下拉列表: MVC6 Dropdownlist of Country

在我的模型课中,我有

public SelectList SiteList { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有:

var sites = _context.Site.OrderBy(s => s.Name).Select(x => new { Id = x.ID, Value = x.Name });

    var model = new Issue();
    model.SiteList = new SelectList(sites, "Id", "Value");

    return View(model);
Run Code Online (Sandbox Code Playgroud)

在我看来,我有:

<td class="input-item">
<select asp-for="SiteID" asp-items="@Model.SiteList"></select>
</td>
Run Code Online (Sandbox Code Playgroud)

当我尝试实施迁移时,出现以下错误:实体类型“Microsoft.AspNetCore.Mvc.Rendering.SelectListGroup”需要定义主键。

我尝试忽略我的 Migrations 命名空间:

modelBuilder.Entity<Issue>().Ignore(i => i.SiteList);
Run Code Online (Sandbox Code Playgroud)

但我不完全确定我是否在正确的地方完成了这项工作。

coo*_*and 9

为了解决这个问题,只需将

[NotMapped]
Run Code Online (Sandbox Code Playgroud)

在模型 .cs 文件中的 SelectList 属性上方:

[NotMapped]
public SelectList SiteList { get; set; }
Run Code Online (Sandbox Code Playgroud)

这可以防止 EntityFramework 将列表映射到模型。由于它不是模型数据库的一部分,因此不需要主键。