如何使用Entity Framework Core

时间:2016-10-26 16:36:31

标签: entity-framework-core .net-core

我有一个由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")]等数据注释,但我不确定这是正确的做法。

1 个答案:

答案 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更优雅的方式来获取城市表的内容以填充下拉列表,如果有人有更好的方法,我很想知道它