我有一个ASP.NET Core项目,它有两个表:City和Country。
public class City
{
[Key]
public int Id { get; set; }
public string CityName{ get; set; }
public string Region{ get; set; }
public int CountryID { get; set; }
public Country Country { get; set; }
}
public class Country
{
[Key]
public int Id { get; set; }
[Required]
public string CountryName{ get; set; }
[Required]
public string Continent{ get; set; }
[Required]
public string Capital{ get; set; }
[Required]
public int NumberOfPeople{ get; set; }
}
城市类继承国家/地区外键,1个国家/地区可以拥有多个城市,即1-(0..M)。它们都来自同一个DbContext
我希望能够点击"国家"的索引页面上的详细信息页面(显示所有国家/地区,其属性和选项)
这样它就会显示国家信息和该国家/地区的所有城市,但我无法弄清楚如何通过DbContext
连接两个表格。
如何将带有特定ID和内部所有城市的国家/地区信息的模型传递到详细信息视图
答案 0 :(得分:1)
如果您想在City
中添加所有Country
,则需要添加Country
到City
的导航属性(已经是public class Country
{
...
public ICollection<City> Cities { get; set; }
}
的其他部分配置关系):
var country = await context.Countries
.Include(x => x.Cities)
.SingleAsync(x => x.ID == someId);
这允许您执行单个数据库查询以获得所有结果,而无需进行手动连接 然后您可以将其用作:
Async
您可以使用查询执行程序的非line = line.Remove(0)
版本,但鉴于您使用的是ASP.NET Core应用程序,我建议不要使用它。
答案 1 :(得分:0)
一种方法是使用字段的属性:
public class City
{
[Key]
public int Id { get; set; }
public string CityName{ get; set; }
public string Region{ get; set; }
public int CountryID { get; set; }
[ForeignKey("CountryID")]
public virtual Country Country { get; set; }
}
public class Country
{
[Key]
public int Id { get; set; }
[Required]
public string CountryName{ get; set; }
[Required]
public string Continent{ get; set; }
[Required]
public string Capital{ get; set; }
[Required]
public int NumberOfPeople{ get; set; }
[InverseProperty("Country")]
public virtual ICollection<City> Cities { get; set; }
}
答案 2 :(得分:0)
有多种方法可以做到。
首先,您应该声明您的类,例如:
)
其次,您应该配置关系:
public class City
{
[Key]
public int Id { get; set; }
public string CityName{ get; set; }
public string Region{ get; set; }
public int CountryId { get; set; }
public Country Country { get; set; }
}
public class Country
{
[Key]
public int Id { get; set; }
[Required]
public string CountryName{ get; set; }
[Required]
public string Continent{ get; set; }
[Required]
public string Capital{ get; set; }
[Required]
public int NumberOfPeople{ get; set; }
public virtual ICollection<City> Cities { get; set; }
}