我有一个由ID和标签组成的表,我用它来填充整个项目的下拉列表。在此示例中,我使用的是城市列表:
public class Cities
{
public int CityID { get; set; }
public string CityName { get; set; }
}
我希望我的Office模型能够引用城市列表:
public class Office
{
public int ID { get; set; }
public string Name { get; set; }
public string StreetAddress { get; set; }
public int CityID { get; set; }
}
我知道如何使用以下内容获取我的控制器中的城市列表:
public async Task<IActionResult> Edit(int? id)
{
var office = await _context.Offices.SingleOrDefaultAsync(m => m.OfficeID == id);
var getCities = _context.Cities.ToList();
ViewBag.citylist = new SelectList(getCities, "CityID", "CityName");
return View(office);
}
使用ViewBag似乎不是填充列表的优雅或正确的方法,但它可以工作。
如果我创建或更新办公室记录,城市ID将正确存储在我正在更新的记录中。但是,当我查看办公室记录时,我只能访问城市ID。 我不知道如何使用城市ID 访问和显示城市名称。如何使用存储在办公室记录中的cityID从Cities表访问城市名称?
似乎最好使用以下内容访问所有必需的信息:
var offices = await _context.Offices
--> .PseudoCode.GetTheCityNameFromTheID() <---
.ToListAsync();
但我不知道如何使用Entity Framework Core在模型之间创建然后使用这种关系(多对一?)。我知道每个办公室记录只有一个匹配的城市价值。
此外,如果我想使用相同的城市列表来填充其他模型上的城市信息,例如用户个人资料,该怎么办?
EF的前核心版本有一些示例,但语法似乎与较新的Core语法无关。
我尝试使用[ForeignKey("bar")]
和[InverseProperty("foo")]
等数据注释,但我不确定这是正确的做法。
答案 0 :(得分:1)
我想我找到了答案。在将引用下拉列表表的模型中,使用数据批注设置ForeignKey
属性和virtual
类:
public class Office
{
public int ID { get; set; }
public string Name { get; set; }
public string StreetAddress { get; set; }
[ForeignKey("Cities")]
public int CityID { get; set; }
public virtual Cities cities { get; set; }
}
这将允许Office模型访问Cities模型中的值:
public class Cities
{
public int CityID { get; set; }
public string CityName { get; set; }
}
在你的控制器中,像这样:
var offices = await _context.Offices
.Include(cityname => cityname.cities)
.ToListAsync();
然后,在您看来,您可以显示与记录的城市ID相关联的城市名称,如下所示:
@Html.DisplayFor(modelItem => item.cities.CityName)
至少这对我来说就像我期望的那样。我仍然不知道是否有比ViewBag
更优雅的方式来获取城市表的内容以填充下拉列表,如果有人有更好的方法,我很想知道它